让MySQL为我们记录执行流程
让MySQL为我们记录执行流程
我们可以开启profiling,让MySQL为我们记录SQL语句的执行流程
-
查看profiling参数
shell > select @@profiling;
-
进行更改
shell > set profiling = 1;
-
执行语句
select * from employees limit 100;
-
查看该语句执行流程
show profile;
分别是
- 启动
- 权限检查
- 打开表
- 初始化表
- 锁系统
- 优化查询
- 统计
- 优化
- 执行
- 发送数据
- 结束
- 查询结束
- 关闭表
- 释放
- 清理
-
请注意上述命令与下面的不同
show profiles;
显示完成每条指令的所花费的时间。上面
show profile
是对一条指令每个阶段花费时间的统计,这个统计的所有时间的总和就等于show profiles
中对应命令的Duration。
补充
(0812)
-
查询profile设置
show variables like ‘%profil%’; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | have_profiling | YES | | profiling | OFF | | profiling_history_size | 15 | +------------------------+-------+ 3 rows in set (0.10 sec)
-
基于会话基本开启
set profiling = 1;
-
查询某条语句的性能消耗情况
show profile for query 1;
# query 1 是 query id
-
查询cpu,内存和I\O消耗情况
show profile cpu,memory,block io for query 1;
-
查看查询过程每一步对应的源码文件、函数名、源文件行数
show profile source for query 1;
-
show profiles 在mysql5.7.2中已经被废除。