MySQL 之性能分析工具 profiling

MySQL 之性能分析工具 profiling

MySQL 中提供了内置的性能分析工具 profiling, 今天就一起看下这个工具怎么使用。

首先确认 profiling 工具状态

查看 profiling 相关变量: 开关及存储记录数

show VARIABLES like 'profil%'

profiling       ON
profiling_history_size       15

为了方便测试, 先将存储记录调为 100

set profiling_history_size = 100;

准备一条测试 SQL

在 test 库下, 自定义 uu 表, 执行查询 SQL, 分析执行情况。

SELECT _rowid,u.* from test.uu u;

查看 SQL ID

查看最近执行的 SQL, 可以发现该 SQL 的 query id 是 61,

show profiles;

执行 sql, 分析各阶段执行情况

show profile for query 61;

可以发现该 SQL 执行时间最长的 executing 阶段。

因为该 sql 是简单查询, 表中数据又很少, 分析结果也是符合实际情况的。

不过 show profile 是一个即将被废弃掉的命令,

官方已经推荐使用 performance_schema.profiling 表来查看 SQL 执行情况了。

performance_schema.profiling 表结构

XXX
1QUERY_ID查询 ID, 用于标记不同的查询
2SEQ一个查询内部执行的步骤 , 从 2 开始
3STATE步骤的状态
4DURATION持续时间(单位: 秒)
5CPU_USER用户空间的 cpu 使用量
6CPU_SYSTEM内核空间的 cpu 使用量
7CONTEXT_VOLUNTARY上下文主动切换
8CONTEXT_INVOLUNTARY上下文被动切换
9BLOCK_OPS_IN阻塞输入操作
10BLOCK_OPS_OUT阻塞输出操作
11MESSAGES_SENT消息发送
12MESSAGES_RECEIVED消息接受
13PAGE_FAULTS_MAJOR主分页错误
14PAGE_FAULTS_MINOR次分页错误
15SWAPSswap 次数
16SOURCE_FUNCTIONMySQL 源码函数
17SOURCE_FILE源码文件
18SOURCE_LINE源码行数

通过 profiling 表, 分析 SQL 执行情况

SELECT * from information_schema.profiling where query_id = 61;

可以发现执行时间是一样的, 同时还增加了更多的信息。需要注意的是 Sending data 状态并不是单纯的发送数据, 而是包括收集, 发送数据两个阶段。这里列出来的 state 并不是所有状态, 比如用到临时表时, 还会有 Creating tmp table 等状态。
上述例子 opening table 占用时间最长, 但这只限于当前情况, 在不同的情况下, 占用时间是不同的, 所以一定要根据实际情况分析, 不能一概而论。
有观点认为这是个鸡肋的工具, 并不能提供很好的解决方案。我想, profiling 能从更宏观的角度去发现问题, 提供信息, 算是个很不错的分析工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云满笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值