1、介绍
Query Profiler是MySQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的硬件性能瓶颈在什么地方。
通常我们是使用的explain,以及slow query log都无法做到精确分析,但是QueryProfiler却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。不过该工具只有在MySQL 5.0.37以及以上版本中才有实现。
默认的情况下,MYSQL的该功能没有打开,需要自己手动启动。
2、开启Profile功能
Profile 功能由MySQL会话变量 : profiling控制,默认是OFF关闭状态。查看是否开启了Profile功能:
select @@profiling;
-- 或者
show variables like '%profil%';
开启profile功能
set profiling=1; --1是开启、0是关闭
3、语句使用
show profile 和 show profiles 语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况.
show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size 控制,默认15条
show profile: 展示最近一条语句执行的详细资源占用信息,默认显示 Status和Duration两列
show profile 还可根据 show profiles 列表中的 Query_ID ,选择显示某条记录的性能分析信息
type是可选的,取值范围可以如下:
ALL 显示所有性能信息
BLOCK IO 显示块
IO操作的次数
CONTEXT SWITCHES 显示上下文切换次数,不管是主动还是被动
CPU 显示用户CPU时间、系统CPU时间
IPC 显示发送和接收的消息数量MEMORY [暂未实现]
PAGE FAULTS 显示页错误数量
SOURCE 显示源码中的函数名称与位置
SWAPS 显示SWAP的次数
4、示例
查看是否打开了性能分析功能
select @@profiling;
打开 profiling 功能
set profiling=1;
执行sql语句
执行 show profiles 查看分析列表
查询第二条语句的执行情况
show profile for query 2;
可指定资源类型查询
show profile cpu,swaps for query 2;
5. 应注意的结论
converting HEAP to MyISAM 查询结果太大,内存不够用往磁盘上搬; Creating tmp table 创建临时表:拷贝数据到临时表,用完再删除; Copying to tmp table on disk 把内存临时表复制到磁盘,危险。
如果您觉得文章好看,欢迎点赞收藏加关注,一连三击呀,您的肯定是我持续输出的动力,感谢!!☺☻