show profile是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以帮助进行SQL问题的诊断。
查看配置
show variables like '%profiling%'
# 本文这里如下
have_profiling YES //是否支持profile
profiling OFF // OFF表示关闭,默认关闭
profiling_history_size 15 // 记录最近15条语句
可以使用命令set global profiling=ON
进行临时开启,如果需要永久生效则在MySQL的配置文件中进行配置。
show profiles查看最近SQL
用来查看最近15条SQL,如下所示主要有Query_ID、Duration以及Query三项。其中Query_ID将在下面详细分析时使用。Duration则表示该条语句执行的时间。
查看SQL详细情况
show profile [OPTIONS] for query Query_ID;
# 如下
show profile cpu,block io for query 2;
选项注释
选项
说明
ALL
显示所有的开销信息
BLOCK IO
显示块IO相关开销
CPU
显示CPU相关开销信息
CONTEXT SWITCHES
上下文切换相关开销
IPC
显示发送和接收相关开销信息
MEMORY
显示内存相关开销信息
PAGE FAULTS
显示页面错误相关开销信息
SOURCE
显示和source_function,source_file,source_line相关的开销信息
SWAPS
显示交换次数相关开销的信息
几个雷区
即当你从上面详细跟踪中看到下面几个,要特别注意。
convertiong heap to myisam :查询结果太大,内存不够用。
creating tmp table : 创建临时表(拷贝数据到临时表,用完临时表后删除临时表)。
copying to tmp table on disk : 把内存中临时表复制到磁盘–这是一个危险的动作。
locked : 无需多言,锁的时间比较长