在性能调优中分析SQL执行带来的开销是优化SQL的常用手段,在MySQL中可以使用profiling参数对sql进行分析。

1、查看与profile相关的三个参数;

mysql> show variables like '%profil%';

MySQL如何跟踪sql语句各阶段性能开销-LMLPHP

have_profiling用于控制是否由系统变量开启或禁用profiling

profiling是否开启profiling分析功能

profiling_history_size设置profiling的保留数目

2、开启profiling分析

mysql> set profiling=1;

MySQL如何跟踪sql语句各阶段性能开销-LMLPHP

3、执行一条sql语句;

4、sql执行完成后查看profile概要信息;

mysql> show profiles;

MySQL如何跟踪sql语句各阶段性能开销-LMLPHP

MySQL如何跟踪sql语句各阶段性能开销-LMLPHP

上图可以看到保存了1条执行结果(最多保留最近的15条,就是上述profiling_history_size参数控制的)

5、查看单个Query详细的profile信息,下面看执行时间和CPU开销,query后面的1就是上图中的Query_ID

mysql> show profile cpu for query 1;

MySQL如何跟踪sql语句各阶段性能开销-LMLPHP

因为测试sql是从百万条文章详情中查询,所以在上图可以看出sql在Sending data执行了4.1秒,CPU使用也非常高

6、关闭profiling

mysql> set profiling=0;

MySQL如何跟踪sql语句各阶段性能开销-LMLPHP

7、除了可以查看执行时间和CPU消耗外,还可以查看磁盘io、swap交换、内存等资源的开销情况。如(有些参数Windows下不可使用)

mysql> show profile cpu,block io,memory,swaps for query 1;

03-14 00:15