目录
什么是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 //彻底清理