8.2 随身药箱:诊断工具箱


8.2 随身药箱:诊断工具箱

本节摘要:诊断慢查询不能只靠手工敲命令。官方的 explained 可视化、Percona Toolkit 的在线改表与热点分析、系统级的监控面板构成三层工具箱。本节按"什么症状掏什么工具"组织,最后给出全书诊断流程的随身卡。

第一层:官方自带

mysqldumpslow -s t -t 10 slow.log # 慢日志聚合:按耗时取前十条
-- 实时抓正在跑的高危语句 SELECT * FROM sys.session WHERE command <> 'Sleep' ORDER BY exec_time DESC;

sys schema 是 8.0 自带的视图层,把 performance_schema 的原始表翻译成人话,sys.statements_with_full_table_scans 直接列出全表扫描的语句。

第二层:Percona Toolkit 三件套

# 在线改表:大表加列不锁业务,第 2 章 ALTER 暗坑的解药 pt-online-schema-change \ --alter "ADD COLUMN channel TINYINT UNSIGNED NOT NULL DEFAULT 0" \ D=clinic,t=clinic_order --execute # 热点索引分析:从慢日志里挖出最该建的索引 pt-query-digest slow.log # 从库延迟治理:校验主从数据一致性 pt-table-checksum --databases clinic

pt-query-digest 的报告值得单独一说:它把同类语句归并、按总耗时排序、给出样本执行计划,一份报告往往直接就是优化工单列表。

第三层:系统与监控

数据库的"慢"有一半来自数据库之外:磁盘 IO 打满、CPU 被同机进程挤占、网络抖动。PROMetheus 加 Grafana 的社区模板覆盖连接数、命中率、复制延迟等核心指标,比人肉 SHOW STATUS 可持续得多。

图:全书诊断流程随身卡

图:全书诊断流程随身卡

💡 关键直觉:工具越先进,越要能手工复现它的核心结论。自动化仪表会坏,EXPLAIN 与 SHOW STATUS 永远在线——它们才是诊断室最后的听诊器。

慢日志聚合的进阶读法

mysqldumpslow 是速览,pt-query-digest 的报告才是完整的病理切片。读它的报告抓四个区块:统计头部看总耗时分布与 QPS;排行表看按不同维度排序的 Top 语句(默认按总耗时,加参数可按次数、锁时间排);每条语句的细节区有平均耗时分布直方图,双峰分布往往意味着两种执行计划在交替(典型如绑定参数的取值分布差异导致有时走索引有时不走);样本执行计划区直接给出该语句的 EXPLAIN,省去手工复现。

# 按返回行数排序:专抓"扫描多返回少"的性价比黑洞 pt-query-digest --order-by=Rrows slow.log # 只看某时段,配合限流分析 pt-query-digest --since '2026-08-20 00:00:00' --until '2026-08-20 12:00:00' slow.log

拿到报告后的动作序列:Top 三条逐条拍执行计划、开处方、复测;第四条往后按"总耗时占比"决定投入,通常前三条占掉一半以上总耗时,手术台上做完前三台,整个库的负载就明显改观。

性能库与 sys 的三张必会视图

performance_schema 原始表多到劝退,日常靠 sys 视图就够了。三张必会:全表扫描语句榜、冗余与未用索引榜、I/O 热点表榜:

-- 哪些语句在全表扫描,按执行次数排 SELECT query, exec_count, no_index_used_count, rows_avg FROM sys.statements_with_full_table_scans ORDER BY no_index_used_count DESC LIMIT 5; -- 哪些索引从未被使用(配合不可见索引做删除决策) SELECT * FROM sys.schema_unused_indexes WHERE object_schema='clinic'; -- 哪张表在被反复读盘(缓冲池装不下的信号) SELECT object_name, count_read, count_write FROM sys.io_global_by_file_by_bytes LIMIT 5;

这三张视图加上 SHOW ENGINE INNODB STATUS 与 EXPLAIN,构成不依赖任何外部工具的完整诊断闭环——工具箱会换代,这五样是跨版本的硬通货。

工具箱的收敛原则

工具会不断增加,原则是把箱子收敛到三层各三件:自带层三件是 EXPLAIN、SHOW STATUS 系、sys 视图;深度层三件是 pt-query-digest、pt-online-schema-change、pt-table-checksum;持续层三件是基础指标面板(连接、延迟、命中率)、慢日志聚合报表、告警通道。每层三件都亲手用过、知道它输出里每个数字的含义,比收藏三十件只会点按钮的工具强。收敛的检验标准也很简单:断网断工具的情况下,只靠命令行能否完成一次完整的慢查询诊断——能,箱子就收敛好了。

工具箱一章的最后提醒是工具的克制使用。在线改表工具再成熟,执行前也要确认磁盘余量与主从延迟预案;聚合报告再方便,结论也要抽条亲自复测;监控面板再漂亮,告警阈值也要定期按业务节律重标。工具放大的是使用者的判断力,判断力不足时它放大的是误操作。全书教的所有手工技能,最终目的都是让你在工具失效、面板黑屏、只剩一个终端连着库的时刻,仍然是一个能下单的医生——那个时刻的表现,才是这本书真正的毕业考试。

本节要点回顾

  • 三层工具箱:sys/mysqldumpslow 自带层、Percona Toolkit 深度层、监控面板持续层
  • pt-query-digest:慢日志聚合报告直接生成优化工单
  • 随身卡:定性、拍片、开方三步,全书所有病例的收束

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U