LAMP系统性能调优之MySQL服务器调优
2010-08-23 15:58:28 来源:WEB开发网如果 sort_merge_passes 很大,就表示需要注意sort_buffer_size。例如, sort_buffer_size = 4M将排序缓冲区设置为4MB。
MySQL 也会分配一些内存来读取表。理想情况下,索引提供了足够多的信息,可以只读入所需要的行,但是有时候查询(设计不佳或数据本性使然)需要读取表中大量数据。要理解这种行为,需要知道运行了多少个 SELECT 语句,以及需要读取表中的下一行数据的次数(而不是通过索引直接访问)。实现这种功能的命令如清单 9 所示。
清单 9. 确定表扫描比率mysql> SHOW STATUS LIKE "com_select";
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| Com_select | 318243 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> SHOW STATUS LIKE "handler_read_rnd_next";
+-----------------------+-----------+
| Variable_name | Value |
+-----------------------+-----------+
| Handler_read_rnd_next | 165959471 |
+-----------------------+-----------+
1 row in set (0.00 sec)
Handler_read_rnd_next / Com_select得出了表扫描比率 —— 在本例中是521:1。如果该值超过4000,就应该查看read_buffer_size,例如read_buffer_size = 4M。如果这个数字超过了 8M,就应该与开发人员讨论一下对这些查询进行调优了!
3个必不可少的工具
尽管在了解具体设置时,SHOW STATUS命令会非常有用,但是您还需要一些工具来解释 mysqld 所提供的大量数据。我发现有3个工具是必不可少的;在参考资料 一节中您可以找到相应的链接。
大部分系统管理员都非常熟悉 top命令,它为任务所消耗的CPU 和内存提供了一个不断更新的视图。 mytop对top进行了仿真;它为所有连接上的客户机以及它们正在运行的查询提供了一个视图。mytop 还提供了一个有关关键字缓冲区和查询缓存效率的实时数据和历史数据,以及有关正在运行的查询的统计信息。这是一个很有用的工具,可以查看系统中(比如10 秒钟之内)的状况,您可以获得有关服务器健康信息的视图,并显示导致问题的任何连接。
mysqlard 是一个连接到 MySQL服务器上的守护程序,负责每 5 分钟搜集一次数据,并将它们存储到后台的一个 Round Robin Database 中。有一个 Web 页面会显示这些数据,例如表缓存的使用情况、关键字效率、连接上的客户机以及临时表的使用情况。尽管 mytop提供了服务器健康信息的快照,但是mysqlard则提供了长期的健康信息。作为奖励,mysqlard使用自己搜集到的一些信息针对如何对服务器进行调优给出一些建议。
搜集 SHOW STATUS 信息的另外一个工具是mysqlreport。其报告要远比 mysqlard 更加复杂,因为需要对服务器的每个方面都进行分析。这是对服务器进行调优的一个非常好的工具,因为它对状态变量进行适当计算来帮助确定需要修正哪些问题。
结束语
本文介绍了对MySQL进行调优的一些基础知识,并对这个针对LAMP 组件进行调优的3 部分系列文章进行了总结。调优很大程度上需要理解组件的工作原理,确定它们是否正常工作,进行一些调整,并重新评测。每个组件 —— Linux、Apache、PHP或MySQL —— 都有各种各样的需求。分别理解各个组件可以帮助减少可能会导致应用程序速度变慢的瓶颈。
更多精彩
赞助商链接