show profile是mysql提供的分析sql的工具。
是否支持show profile
select @@have_profiling
show profile默认是关闭的,需要开启才能使用, 开启
select @@profiling;
set profiling = 1;
当sql语句执行完毕后,可以使用
show profiles;
查看sql执行的顺序(Query_ID)、消耗时间(Duration)、对应的sql语句(Query)
通过
show profile for query 2;
2表示Query_ID,查看执行过程中线程的每个状态和消耗的时间。
mysql支持单个或多个类型的明细查看,可选择类型常用的有: all、cpu、ipc、block io、 memery、context switch、page faults、swaps、source。
all: 显示所有开销。
cpu:显示cpu相关开销;
ipc:显示发送和接收相关开销。
block io:显示io相关开销。
memery: 显示内存相关开销。
context switch: 显示上下文切换相关开销。
page faults: 显示页面错误开销。
swaps: 显示交换次数相关开销。
source: 显示和source_function、source_file、source_line相关开销。
如果show profile出现如下情况:
1、converting HEAP to MYISAM,表示查询结果太大,内存都不够了,需要用到磁盘。
2、create tmp table,创建临时表。
3、copying to tmp table on disk,把内存中临时表复制到磁盘。
4、locked
那么这个sql语句写的有严重问题。