在性能调优中分析SQL执行带来的开销是优化SQL的常用手段,在MySQL中可以使用profiling参数对sql进行分析。
1、查看与profile相关的三个参数;
mysql> show variables like '%profil%';
have_profiling用于控制是否由系统变量开启或禁用profiling
profiling是否开启profiling分析功能
profiling_history_size设置profiling的保留数目
2、开启profiling分析
mysql> set profiling=1;
3、执行一条sql语句;
4、sql执行完成后查看profile概要信息;
mysql> show profiles;
上图可以看到保存了1条执行结果(最多保留最近的15条,就是上述profiling_history_size参数控制的)
5、查看单个Query详细的profile信息,下面看执行时间和CPU开销,query后面的1就是上图中的Query_ID
mysql> show profile cpu for query 1;
因为测试sql是从百万条文章详情中查询,所以在上图可以看出sql在Sending data执行了4.1秒,CPU使用也非常高
6、关闭profiling
mysql> set profiling=0;
7、除了可以查看执行时间和CPU消耗外,还可以查看磁盘io、swap交换、内存等资源的开销情况。如(有些参数Windows下不可使用)
mysql> show profile cpu,block io,memory,swaps for query 1;