show profiles是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优的测量。
默认是关闭的,使用前需要开启
show variables like 'profiling';
set profiling = on;
运行慢SQL
select * from emp limit 150000;
查看结果
show profiles;
诊断SQL,number就是show profiles结果,该SQL对应的序号
show profiles cpu, block io for query number;
这里可选的参数有
- ALL,显示所有的开销信息
- BLOCK IO,显示块IO相关开销
- CONTEXT SWITCHES,上下文切换相关开销
- CPU,显示CPU相关开销信息
- IPC,显示发送和接收相关开销信息
- MEMORY,显示内存相关开销信息
- PAGE FAULTS,显示页面错误相关开销信息
- SOURCE,显示和Source_function,Source_file,Source_line相关的开销信息
- SWAPS,显示交换次数相关开销信息
执行
show profiles ... for query number;
之后,就显示很多数据段
日常开发需要注意的结论,出现以下情况,开销都会很大。
converting HEAP to MyISAM:查询结果太大,内存都不够用了往磁盘上搬了。
Creating tmp table:创建临时表,拷贝数据到临时表,用完再删除。
Copying to tmp table on disk:把内存中临时表复制到磁盘。
locked:锁