1、show profile 是什么
是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量。
官网:http://dev.mysql.com/doc/refman/5.5/en/show-profile.html
2、查看 profile 的开启状态
默认情况下,参数处于关闭状态,并保存最近15次的运行结果。
show variables like '%profiling%';
3、开启 profiles 的状态
set profiling=1; ## 开启show profiles
show variables like '%profiling%'; ## 再次确认开启状态
4、 运行sql
运行几个较复杂、耗时间的sql,以便查看效果。
select * from emp group by id%10 limit 150000;
select * from emp group by id%20 order by 5;
select * from dept;
5、 查看结果
show profiles;
6、诊断SQL
show profile cpu,block io for query n ; ## n为上一步前面的问题SQL数字号码
type:
| ALL --显示所有的开销信息
| BLOCK IO --显示块IO相关开销
| CONTEXT SWITCHES --上下文切换相关开销
| CPU --显示CPU相关开销信息
| IPC --显示发送和接收相关开销信息
| MEMORY --显示内存相关开销信息
| PAGE FAULTS --显示页面错误相关开销信息
| SOURCE --显示和Source_function,Source_file,Source_line相关的开销信息
| SWAPS --显示交换次数相关开销的信息
下图是网上找的,对某个SQL进行分析时,耗时特别长的。
7、开发中注意的事项
执行 show profile cpu,block io for query n ;
的结果中,出现下面的情况,则意味着SQL急需优化:
converting HEAP to MyISAM
查询结果太大,内存都不够用了往磁盘上搬了。Creating tmp table
创建临时表,拷贝数据到临时表,用完再删除表。Copying to tmp table on disk
把内存中临时表复制到磁盘,危险!locked