会员控制台 会员登陆 会员注册 最后更新 高级搜索 会员投稿 退出登陆
设为首页
收藏本站
留言给我
  首页 | 操作系统类 | 程序设计类 | 数据库类 | 应用服务类 | 网络及硬件类 | 其他技术 | GBunix论坛
操作系统类
程序设计类
数据库类
应用服务类
网络及硬件类
其他技术
Unix中文 / 数据库类 / Mysql / MySQL性能优化全攻略
MySQL性能优化全攻略
2005-06-04          点击:
MySQL性能优化全攻略

导读 

  数据库性能优化涉及到系统硬件和软件的方方面面,本文讨论的主要是编译和配置优化、服务器参数调整、如何选用合适的表类型,以及如何用数据库内建的命令辅助分析和优化性能,特别是如何用EXPLAIN辅助优化查询的性能。 原文出处:http://www.devshed.com/Server_Side/MySQL/Optimize/ 

  许多新手往往把重新编译源代码看成是一种无可避免的灾祸,其实编译源代码还能对程序的最终性能起到显著的影响。编译过程可以用不同流水线上装配同样型号的汽车比拟:第一条流水线由素质较低的工人操作,装配程序未能尽善尽美,零件装配误差较大;第二条流水线由高素质的技术工人操作,汽车装配程序合理,且利用最好的工具保证产品的高质量。虽然两条流水线上装配出来的汽车外观一模一样,但两种汽车的性能表现却可能大不相同。对于编译器来说情况也完全相似,有些编译器装配出来的程序要比其他编译器的更好。 

  编译时考虑所有可用的选项也是极其重要的。很可能某些编译器的默认选项值不能符合要求,或者,为了满足应用的特定需求,我们需要指定一些特殊的编译选项。正如MySQL文档所指出的,只要采用了更好的编译器或者使用更合理的编译选项,应用性能的提高程度可以达到10-30%。 

  既然如此,编译时具体应该注意哪些问题才能让MySQL数据库运行得更快呢? 

  ▲ 使用pgcc编译器 

   如果系统使用的是奔腾处理器,那么pgcc(Pentium GCC)正是为这些系统下运行的程序提供的专用编译器。pgcc是gcc编译器(http://www.gnu.org/software/gcc/)的奔腾优化版,用pgcc编译MySQL代码可以让整体性能提高10%以上!关于pgcc的更多信息,请参见http://www.goof.com/pcg/。当然,如果系统使用的不是奔腾处理器,采用这种方法提高MySQL的运行速度就不合适了,因为正如其名字所示,pgcc是专门为奔腾系统提供的。 

  ▲ 把mysqld编译成静态模式 

  以不带共享库的形式编译mysqld同样可以提高性能。在配置行加入下面这个选项可以将mysqld编译成静态模式: 

  % >./configure -with-mysqld-ldflags=-all-static [--其他配置选项] 

  ▲ 配置示例 

  下面的配置命令经常用于提高MySQL的性能: 

  % >CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 
  -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" 
  ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static 
  --disable-shared 

  详细解释每个gcc选项的作用已经超出了本文的范围,请访问gcc的说明文档了解这些信息(http://gcc.gnu.org/)。注意不要拘泥于这个例子,请在命令行执行man gcc仔细了解每一个gcc选项的含义。

  正确的编译方法固然重要,但它只是提高MySQL服务器性能工作的一部分。MySQL服务器的许多参数会影响服务器的性能表现,而且我们可以把这些参数保存到配置文件,使得每次MySQL服务器启动时这些参数都自动发挥作用。这个配置文件就是my.cnf。 

  MySQL服务器提供了my.cnf文件的几个示例,它们可以在/usr/local/mysql/share/mysql/目录下找到,名字分别为my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中关于规模的说明描述了该配置文件适用的系统类型。例如,如果运行MySQL服务器的系统内存不多,而且MySQL只是偶尔使用,那么使用my-small.cnf配置文件最为理想,这个配置文件告诉mysqld daemon使用最少的系统资源。反之,如果MySQL服务器用于支持一个大规模的在线商场,系统拥有2G的内存,那么使用mysql-huge.cnf最为合适。 

  要使用上述示例配置文件,我们应该先复制一个最适合要求的配置文件,并把它命名为my.cnf。这个复制得到的配置文件可以按照如下三种方式使用: 

全局:把这个my.cnf文件复制到服务器的/etc目录,此时文件中所定义的参数将全局有效,即对该服务器上运行的所有MySQL数据库服务器都有效。 

局部:把这个my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/将使该文件只对指定的服务器有效,其中[MYSQL-INSTALL-DIR]表示安装MySQL的目录。 

用户:最后,我们还可以把该文件的作用范围局限到指定的用户,这只需把my.cnf文件复制到用户的根目录即可。 

  那么,如何设置my.cnf文件中的参数呢?或者进一步说,哪些参数是我们可以设置的呢?所有这些参数都对MySQL服务器有着全局性的影响,但同时每一个参数都和MySQL的特定部分关系较为密切。例如,max_connections参数属于mysqld一类。那么,如何才能得知这一点呢?这只需执行如下命令: 

  % >/usr/local/mysql/libexec/mysqld --help 

  该命令将显示出和mysqld有关的各种选项和参数。要寻找这些参数非常方便,因为这些参数都在“Possible variables for option --set-variable (-O) are”这行内容的后面。找到这些参数之后,我们就可以在my.cnf文件中按照如下方式设置所有这些参数: 

  set-variable = max_connections=100 

  这行代码的效果是:同时连接MySQL服务器的最大连接数量限制为100。不要忘了在my.cnf文件[mysqld]小节加上一个set-variable指令,具体请参见配置文件中的示例。

了解更多详情,参与讨论,请进入GBUNIX论坛

http://www.gbunix.com/bbs/index.php
责任编辑: trotter

相关文章
Linux 如何修复损坏的MySQL数据库 - 08-25 02:10 pm - 点击: 454

发表评论 查看评论 加入收藏 Email给朋友 打印本文
给该文章评分
1 2 3 4 5 6 7 8 9 10
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
发表评论
标题:
内容:
声明:本站资讯均来自互联网,所有文章版权归原作者和出版者所有,如涉及版权问题,请来信告知!
Copyright © 2002-2004 GBunix.com. All rights reserved.