Mysql中show profile的使用
1、Show profile它是什么?
是mysql提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于sql的调优测量。
默认情况下,参数处于关闭状态,并保存最近15次的运行结果。
Show variable like ‘profiling’;
2、开启profile:set profiling=on;
开启后,mysql会记录所有sql语句的执行消耗信息。
3、查看profiles:show profiles;
信息包括:Query_ID(查询id),Duration(耗时),Query(语句)
诊断sql,查看sql语句消耗的具体资源:
Show profile cpu, block io for query id; // 这个id是Query_ID
例如:Show profile cpu, block io for query 3;
常用显示类型有:cpu, block io, memory;
显示的消耗信息类型有如下:
- all,显示所有的开销信息
- block io,显示块IO相关开销
- context switches,上下文切换相关开销
- cpu,显示cpu相关开销
- ipc,显示发送和接收相关开销信息
- memory,显示内存相关开销
- page faults,显示页面错误相关开销
- source,显示和Source_function, Source_file, Source_line相关的开销
- swaps,显示交换次数相关开销
我们可以看到上面status字段中显示了3号sql整个执行流程状态。
但这些状态耗时还是非常小,表示正常。
有4种常用耗时状态:
(1)converting HEAP to MyISAM,查询结果太大,内存不够用,开始往磁盘上搬;
(2)Creating tmp table,创建临时表,还包括拷贝数据到临时表,用完再删除;
(3)Copying to tmp table on disk,把内存中临时表复制到磁盘上,此操作危险!!
(4)locked,表中相关数据被锁定;
再看另一条sql的执行消耗的部分信息:
我们可以看到使用了临时表,其中拷贝临时表数据就花了2.58秒;