3.3 剖析MySQL查询
捕获MySQL的查询到日志文件中
通过设置long_query_time为0来捕获所有的查询。
pt-query-digest是分析MySQL查询日志最有力的工具。
一般情况下,只需要将慢查询日志文件作为参数传递给pt_query_digest,就可以正确地工作了。它会将查询的剖析报告打印出来,并且能够选择将“重要”的查询逐条打印出更详细的信息。
3.3.2 剖析单条件查询
在定位到需要优化的查询后,可以针对次查询“钻取”更多的信息,确认为什么会花费这么长时间执行,以及需要如何去优化。
有三种方法可以剖析单条查询:SHOW STATUS、SHOW PROFILE、检查慢查询日志的条目
使用 SHOW PROFILE
默认是禁用的,可以通过服务器变量在会话(连接)级别动态地修改。
set profiling = 1;
然后在服务器上执行所有的语句,都会测量其耗费的时间和其他一些查询执行状态变更的相关的数据。这个功能有一定的作用,而且最初的设计功能更强大,但未来的版本中可能会被Performance Sshema所取代。尽管如此,这个工具最有用的作用还是在语句执行期间剖析服务器的具体工作。
当一条查询提交给服务器时,此工具会记录剖析信息到一张临时表,并且给查询赋予从1开始的整数标识符,
**
SELECT * FROM sakila.`nicer_but_slower_film_list` ;SHOW PROFILES ;

对于一些执行得很快的查询这样的精度是不够的,如下
SHOW PROFILE FOR QUERY 1;

剖析报告给出了查询执行的每个步骤花费的时间,看结果很难快速地确定哪个步骤花费。因为输出是按照执行顺序排序,而不是按照花费的时间排序的。可以直接查询
SET @query_id = 1;SELECTSTATE,SUM (duration) AS Total_r,ROUND (100 * SUM (duration) /(SELECTSUM (duration)FROMinformation_schema.`PROFILING`WHERE query_id = @query_id),2) AS Pct_R,COUNT (*) AS Calls,SUM (duration) / COUNT (*) AS "R/Call"FROMinformation_schema.`PROFILING`WHERE query_id = @query_idGROUP BY stateORDER BY Total_r DESC ;
使用SHOW STATUS
MySQL的SHOW STATUS命令返回了一些计数器。既有服务器级别的全局计数器,也有基于某个连接的会话级别的计数器。
