第3章、服务器性能剖析
1、本书所说的性能主要是指“完成某个任务所需要的时间度量”,而相应的优化则是指降低查询执行的时间,从而提升单位时间的查询量。
2、性能剖析一般分为两个步骤,测量任务花费的时间,然后对结果进行统计的排序,将重要的任务排在前边。两种类型的性能剖析:基于执行时间的性能剖析和基于等待的分析。前者用于分析研究什么任务的执行时间最长,而基于等待的分析则是判断任务在什么地方被阻塞的时间最长。
3、性能优化应该优先对占用比重最大的一些查询进行优化。某些查询的执行次数很少,但是
4、TODO,应用xhprof等工具对PHP进行性能分析。
5、可以通过LOAD DATA INFILE将Apache的日志载入到MySQL中,然后通过SQL进行查询。
6、剖析MySQL查询。
剖析服务器负载:
(1) 捕获MySQL查询到日志中(不仅可以捕获慢查询,而且通过设置long_query_time=0来捕获所有的查询。慢查询日志是开销最低、精度最高的测量查询时间的工具。慢查询日志带来的I/O开销可以忽略不计,说明开启慢查询日志基本不会影响服务器的性能,相反,需要担心的是慢查询日志带来的大量磁盘空间消耗。如果长期开启慢查询日志,注意要部署日志轮转(log rotation工具),防止单个日志的大小过大)
(2) 分析查询日志。pt-query-digest工具:
http://www.bitscn.com/pdb/mysql/201407/226145.html
http://blog.csdn.net/seteor/article/details/24017913
7、剖析单条查询
(1) Show Profiles
更新的版本中可能PerformanceSchema替代。这个工具可以在语句执行期间剖析服务器的具体工作。(注意你的MySQL服务器如果编译的时候没有开启with-profiling,那么无法使用show profiles,也无法在information_schema库的profiling表中查到profiling的相关数据)
(2) Show Status
showstatus返回一些计数器,既有服务器级别的全局计数器,也有基于某个连接的会话级别的计数器。explain查看查询的执行计划也可以获得大部分的信息,但是explain是通过评估得到的结果,而通过计数器则是实际的测量结果。TODO: explain和show status的更多细节
(3) 使用Performance Schema
8、诊断间歇性问题。
<1>、Show GlobalStatus
<2>、ShowProcesslist
mysql–e 'SHOW PROCESSLIST\G' | grep State: | sort|uniq –c | sort –rn
<3>、使用查询日志(开启慢查询日志并设置long_query_time=0)
pt-summary和pt-mysql-summary工具获取服务器的状态、参数配置和软硬件环境