目录
什么是Profile?
开启Profile功能
基本使用
分析案例
什么是Profile?
Query Profiler是 MySQL 自带的一种 Query 诊断分析工具 ,通过它可以分析出一条 SQL 语句的 硬件性能瓶颈 在什么地方。 通常我们是使用的 explain ,以及 slow query log 都无法做到精确分析,但是 Query Profiler 却可以定位出一条 SQL 语句执行的各种资源消耗情况,比如 CPU , IO 等,以及该 SQL 执行所耗 费的时间等。
不过该工具只有在MySQL 5.0.37 以及以上版本中才有实现。 默认的情况下, MySQL 的该功能没有打开,需要自己手动启动 。
开启Profile功能
Profile 功能由 MySQL 会话变量 : profiling 控制,默认是 OFF 关闭状态。
查看是否开启了Profile功能:
select @@profiling;
-- 或者
show variables like '%profil%';
开启profile功能
-- 1是开启、0是关闭
set profiling=1;
基本使用
语法:
SHOW PROFILE [type [, type] ... ][FOR QUERY n][LIMIT row_count [OFFSET offset]]type: {ALL| BLOCK IO| CONTEXT SWITCHES| CPU| IPC| MEMORY| PAGE FAULTS| SOURCE| SWAPS
}
type 是可选的,取值范围可以如下:
- ALL 显示所有性能信息
- BLOCK IO 显示块IO操作的次数
- CONTEXT SWITCHES 显示上下文切换次数,不管是主动还是被动
- CPU 显示用户CPU时间、系统CPU时间
- IPC 显示发送和接收的消息数量
- MEMORY [暂未实现]
- PAGE FAULTS 显示页错误数量
- SOURCE 显示源码中的函数名称与位置
- SWAPS 显示SWAP的次数
show profile 和 show profiles 语句可以展示 当前会话 ( 退出 session 后 ,profiling 重置为 0) 中执行
语句的资源使用情况 .
show profiles : 以列表形式显示最近发送到服务器上执行的语句的 资源使用情况 ,显示的记录数由变量 : profiling_history_size 控制 , 默认 15 条
show profile : 展示最近一条语句执行的详细资源占用信息 , 默认显示 Status 和 Duration 两列
show profile 还可根据 show profiles 列表中的 Query_ID , 选择显示某条记录的性能分析信息
-- 查看某条SQL的性能分析信息
show profile for query 1;
-- 查看某条SQL的具体某个指标的性能分析
show profile cpu for query 1;
分析案例
查看是否打开了性能分析功能
select @@profiling;
打开 profiling 功能
set profiling=1;
执行 sql 语句
执行 show profiles 查看分析列表
找到我们执行SQL的Query_ID = 2, 执行show profile
show profile for query 2;
Status各个参数的意思:
1. starting //开始
2. checking permissions //检查权限
3. Opening tables //打开数据表
4. init //初始化
5. Systemlock//锁机制
6. optimizing //优化器
7. statistics //分析语法树
8. prepareing //预准备
9. executing //引擎执行开始
10.end//引擎执行结束
11.query end//查询结束......
12.closing tables //释放数据表
13.freeing items //释放内存
14.cleaning up //彻底清理