0

0

SQL 慢查询日志开启后如何用 pt-query-digest 分析

舞夢輝影

舞夢輝影

发布时间:2026-01-29 20:25:02

|

586人浏览过

|

来源于php中文网

原创

pt-query-digest仅支持标准MySQL慢查询日志(含# Time:、# Query_time:等注释头),需配合--group-by fingerprint等参数才能有效分析,关键指标是Response time占比和Time/call。

sql 慢查询日志开启后如何用 pt-query-digest 分析

MySQL 慢查询日志路径和格式必须匹配 pt-query-digest 要求

pt-query-digest 默认只解析标准 MySQL 慢查询日志(slow_query_log = ONlog_output = FILE),不支持 general_log、JSON 格式或 MariaDB 的 slow log 变体。如果日志里出现 # Time:# User@Host:# Query_time: 这类注释头,基本能用;若全是纯 SQL 或带 SET timestamp= 行但无时间戳注释,则大概率解析失败。

常见问题包括:

  • 启用了 log_output = TABLE:必须先用 SELECT * INTO OUTFILE 导出为文本,再用 --filter 重写时间戳字段
  • 日志被轮转或压缩(如 slow.log.2.gz):pt-query-digest 支持直接读取 .gz,但不能读 .xz.zst
  • MySQL 8.0+ 启用了 log_slow_extra = ON:新增的 # Schema:# Rows_affected: 等字段不影响解析,可保留

pt-query-digest 基础分析命令要加关键参数

裸跑 pt-query-digest /var/lib/mysql/slow.log 往往得不到有用结果——默认只输出前 10 条,且不聚合相似语句(比如 WHERE id = 1WHERE id = 2 被当不同查询)。必须加 --group-by fingerprint 才按抽象语法树归类。

推荐最小可用命令:

pt-query-digest --group-by fingerprint --limit 20 /var/lib/mysql/slow.log

其他高频参数作用:

  • --since "2024-06-01 00:00:00":只分析指定时间后的日志,避免全量扫描
  • --filter '$event->{Bytes} > 1024':过滤掉返回数据量小于 1KB 的查询(适合定位大结果集慢查)
  • --report-format json:输出 JSON 方便下游程序解析(注意是 json 不是 json-pretty
  • --no-report + --print:只打印原始解析后的标准化 SQL,用于调试指纹是否合理

识别“伪慢查询”:Query_time 不等于执行耗时

MySQL 慢查询日志里的 Query_time 是从语句进入排队队列开始计时,包含锁等待、磁盘 I/O 等待,不是纯 CPU 执行时间。所以你会看到:

MagickPen
MagickPen

在线AI英语写作助手,像魔术师一样在几秒钟内写出任何东西。

下载
  • 一条 SELECT * FROM orders WHERE user_id = ? 显示 Query_time: 3.2s,但 EXPLAIN 显示走索引、Rows_examined 只有 12 —— 实际是被 UPDATE orders 锁住了
  • Lock_time 高(比如 2.8s)而 Rows_examined 低,基本就是锁争用,不是 SQL 本身问题
  • Rows_sent 远大于 Rows_examined(如 10000 vs 100):说明有大量临时表或排序,需看 Extra 字段是否含 Using filesortUsing temporary

这时不要急着优化 SQL,先用 SHOW ENGINE INNODB STATUS\G 看当前锁等待链。

输出报告里最该盯住的三列指标

pt-query-digest 默认报告每行代表一类指纹化 SQL,关键列含义容易误解:

  • Rank:按总响应时间降序排,但第 1 名未必最该优化——可能只是调用量极大,单次才 50ms
  • Response time:格式是 3.23s (42%),括号内是占总慢查耗时百分比,这个数字比 Rank 更反映影响面
  • Calls:执行次数,结合 Time/call(平均每次耗时)才能判断是“高频轻耗时”还是“低频重耗时”

真正要优先处理的是:Response time % > 10% 且 Time/call > 500ms 的组合。这类查询往往既拖慢整体,又具备明确优化空间(比如加索引、改 JOIN 顺序)。

别漏看底部的 Profile 小节——它把所有慢查按 Query_timeLock_timeRows_examined 分桶统计,能快速看出瓶颈集中在哪一环。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

728

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

328

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

350

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1263

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

360

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

841

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

423

2024.04.29

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 812人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号