高性能MySQL-服务器性能剖析
1.1 性能优化简介
本书中将MySQL性能定义为完成某件任务所需要的时间,而不是每秒查询次数、CPU利用率等方面;本书中默认向MySQL发送的一切命令都称为查询,诸如 SELECT/UPDATE/DELETE等等。
如果认为性能是响应时间,那么我们的目标就是降低响应时间,降低每个查询的响应时间,那么第二个问题,就是先搞清楚时间花在哪里,即测量时间花在什么地方,无法测量就无法有效优化。
注意,测量范围不要搞错,如出现慢查询,就应该测量或解决慢查询,不应该去排查整个服务器的状况;另外,查询的时间包括等待时间和执行时间,一般处理和解决执行时间,等待时间长的原因很复杂。
通过工具可以显示性能剖析的结果,但注意很多情况是通过结果发现不了的,注意寻找哪些是值得优化的查询、哪些发生了异常、还有很多被隐藏的细节(如平均响应时间很小,但的确存在1~2个真正耗时的慢查询)
1.2 对应用程序进行性能剖析
除了对MySQL服务器进行性能剖析,还有必要对应用程序本身做性能剖析,比如PHP程序;值得注意的是性能剖析也会使服务器变慢,但相对剖析程序所做得贡献来说,那点消耗已经无所谓;
推荐了进行PHP性能剖析的工具,xhprof、Ifp等,不用重新发明“轮子”。
1.3 剖析MySQL查询
对查询的剖析有两种方式,一种是剖析整个MySQL服务器负载,一种是剖析单条语句查询;
剖析服务器负载,可以通过MySQL提供的慢查询日志,现在通过设置 long_query_time 可以将粒度设置到微妙级别;MySQL提供的慢查询日志是开销最低、精度最高的测试查询时间的工具。新浪的SAE就提供针对MySQL的慢查询日志。
剖析单条查询,使用 SHOW PROFILES、SHOW STATUS、查询慢查询日志的条目。先执行一条查询,然后使用 SHOW PROFILES 查看查询执行的时间,然后使用 SHOW PROFILE WHERE QUERY 1,显示该条查询执行的过程,及每个过程所话费的时间,经过排序后,就可以知道 查询把时间花在那个过程上了。
1.4 诊断间歇性问题
1.5 其他剖析工具
1.6 总结