短时抓取完整慢查询日志并用 pt-query-digest 分析
MySQL性能命令
-- Temporary full capture (e.g. 10 minutes); only new connections are affected
SET GLOBAL slow_query_log_file = '/var/lib/mysql/slow.log';
SET GLOBAL log_slow_extra = ON;
SET GLOBAL long_query_time = 0;
SET GLOBAL slow_query_log = ON;
-- ... then return to the normal threshold
SET GLOBAL long_query_time = 1;
# Shell: top 10 queries by total time
pt-query-digest --limit=10 --order-by=Query_time:sum --noversion-check /var/lib/mysql/slow.log > /tmp/digest.txt
pt-query-digest --since='2026-10-08 09:00:00' --until='2026-10-08 10:00:00' --filter '$event->{db} && $event->{db} eq "shop"' --report-format=profile --noversion-check /var/lib/mysql/slow.log作用
在短时间窗口内以 long_query_time=0 抓取所有查询;pt-query-digest 按指纹分组,生成按排名排列的报告,包含总耗时/平均/p95 时间、扫描行数和示例查询。
适用场景
performance_schema digest 不够用时:需要完整语句文本和真实参数的分析、部署前后对比、在其他主机上离线审查。
注意
long_query_time 在会话启动时从全局值复制;连接池中的现有连接在重连前看不到新阈值。在繁忙的服务器上 long_query_time=0 每秒写入数千条记录;注意磁盘空间和 IO,保持窗口简短并务必还原设置。分析前将文件从生产环境拷出。运行 pt-query-digest 的用户需要对该文件有读权限(模式 640,mysql:mysql)。