MySQL profile 可用来查询 SQL 执行状态,对定位一条语句的 I/O消耗 和CPU消耗 非常重要,SQL 语句执行所消耗的最大两部分资源就是 IO
和 CPU
。
在 MySQL 5.7 之后,profile 信息将逐渐被废弃,推荐使用 performance_schema
。
查看 profile 功能是否可用
如果 have_profiling
为 NO
说明不可用
1 | mysql> show variables like '%profiling%'; |
以下输出说明可用:
1 | mysql> show variables like '%profiling%'; |
使用步骤
1 | -- 打开 profile |
指标
指标名 | 指标描述 | 英文描述 |
---|---|---|
ALL | 显示所有性能信息 | displays all information |
BLOCK IO |
显示 IO 的次数 | displays counts for block input and output operations |
CONTEXT SWITCHES | 上下文切换次数 | displays counts for voluntary and involuntary context switches |
CPU |
用户和系统 CPU 使用时间 | displays user and system CPU usage times |
IPC | 显示发送和接收的消息的计数 | displays counts for messages sent and received |
MEMORY | 暂未实现 | is not currently implemented |
PAGE FAULTS | 主/次 缺页数 | displays counts for major and minor page faults |
SOURCE | 使用的 函数、源码文件名、在文件的行数 | displays the names of functions from the source code, together with the name and line number of the file in which the function occurs |
SWAPS | swap 次数 | displays swap counts |
使用方式
1 | -- 显示单个指标 |
ALL 的列
名称 | 描述 | 示例数据 |
---|---|---|
Status | 状态 | init 、executing、Sending data |
Duration | 耗时 | 0.000006 |
CPU_user |
用户态占用的 CPU 时长 | 0.008999 |
CPU_system |
内核占用的 CPU 时长 | 0.003999 |
Context_voluntary | 上下文主动切换 次数 | 0 |
Context_involuntary | 上下文被动切换 次数 | 1 |
Block_ops_in |
阻塞输入操作 | 8 |
Block_ops_out |
阻塞输出操作 | 32 |
Messages_sent | 发送数 | 0 |
Messages_received | 接收数 | 0 |
Page_faults_major | 主 缺页数 | 0 |
Page_faults_minor | 次 缺页数 | 0 |
Swaps | 交换次数 | 0 |
Source_function | 函数 | mysql_execute_command |
Source_file | 源文件 | sql_parse.cc |
Source_line | 源代码行 | 4465 |
Status
名称 | 描述 |
---|---|
starting | 开始 |
checking permissions | 检查权限 |
Opening tables | 打开表 |
init | 初始化 |
System lock |
系统锁 |
optimizing | 优化 |
statistics |
统计 |
preparing | 准备 |
executing |
执行 |
Sending data |
发送数据 |
Sorting result |
排序 |
end | 结束 |
query end | 查询 结束 |
closing tables | 关闭表 /去除TMP 表 |
freeing items | 释放物品 |
cleaning up | 清理 |
show processlist;
的 State
列,可以看出当前 SQL 的执行状态
开启 profiling
1 | UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%' OR NAME LIKE 'stage/%'; |
—— 来自 Profiling MySQL queries from Performance Schema 的留言部分,未验证
Read More
- 本文主要来自 —— Mysql分析-profile详解
- 13.7.5.30 SHOW PROFILE Syntax
- Profiling MySQL queries from Performance Schema
- page fault带来的性能问题
- PAGE FAULTS
- Swap
- 进程间通信
- IPC: Inter-Process Communication