连载中 22/22

收官复盘:一张 MySQL 作战地图

2026-05-13 · 3925 阅读 · 0 评论 · 0 赞

完结,但地图要常翻

从那条 8 秒的订单 SQL 开始,22 篇写完:索引、事务、锁、日志、主从、调优、治理、备份。最后一篇不添新知识,只做一件事——把散落的内容拼成一张出事时能直接翻的作战地图。未来你遇到问题,先查下面的症状索引,再跳对应篇目。

作战地图:症状 → 篇目 → 第一动作

症状第一动作复习篇目
接口变慢,不知道谁干的开慢日志抓 SQL第 1 篇
EXPLAIN 看不懂先看 type、key、rows、Extra第 2 篇
建了索引还是慢按失效写法清单排查第 4、5 篇
走不走索引看心情ANALYZE TABLE + optimizer trace第 6 篇
数据对不上、口径飘忽核对隔离级别与事务边界第 7、8 篇
Deadlock 报错SHOW ENGINE INNODB STATUS 看案发第 9 篇
主从数据不一致查 binlog 与两阶段提交配置第 10 篇
改完读旧数据延迟治理 + 写后读主第 12、13 篇
主库挂了按高可用选型预案切换第 13 篇
CPU 飙高 / 整体变慢sys.session + digest TOP SQL第 15 篇
连接打满、服务假死池参数对账 + 治慢 SQL第 14、16 篇
翻页越深越慢游标分页 / 延迟关联第 18 篇
DDL 卡死连坐全站查 MDL 与长事务,换 gh-ost第 19 篇
表大到心慌先过三道门槛再谈拆第 20 篇
数据被误删全量 + binlog 时间点恢复第 21 篇

按生命周期阅读的路径

  • 建表之前:第 17 篇(字段与表设计)——设计期省下的债不用还利息;
  • 查询优化线:第 1 → 2 → 3 → 4 → 5 → 6 篇,慢日志到优化器的完整闭环;
  • 事务并发线:第 7 → 8 → 9 → 10 篇,redo/undo 到 MVCC 到锁到 binlog;
  • 高可用线:第 11 → 12 → 13 篇,搭建、延迟、切换三部曲;
  • 调优工具线:第 14 → 15 → 16 篇,参数、仪表、连接池;
  • 数据治理线:第 18 → 19 → 20 → 21 篇,深分页、大表 DDL、分库分表、备份。

三条心法

  • 先测量,再动手:慢日志、EXPLAIN、sys schema 全都是测量的仪器。跳过测量直接「优化」,大概率是在给想象中的病灶开刀;
  • 索引是 B+ 树,不是许愿池:最左前缀、覆盖索引、自增主键、索引失效——所有规则都能从「树按序组织、页按序 I/O」推导出来。忘掉口诀时,推一遍就回来了;
  • 每个机制都标着价:MVCC 用存储换读并发,next-key lock 用锁范围换隔离,分库分表用 join 和事务换容量,双 1 用延迟换安全。没有免费的隔离级别,只有你愿不愿意付的账单。

上线检查清单

  • 慢日志开启,long_query_time = 1;
  • 核心 SQL EXPLAIN 验收:type 至少 range,高频查询无 Using filesort;
  • 全库 utf8mb4,COLLATE 三层一致;
  • 金额 DECIMAL,主键 bigint 趋势递增;
  • 交易链路双 1(flush_log_at_trx_commit = 1,sync_binlog = 1)未动;
  • Buffer Pool 按内存 50-70% 配置,命中率 99% 以上;
  • 连接池上限与 max_connections 对过账,业务账号与运维账号分离;
  • 从库 super_read_only 开启;
  • 每日全量备份 + binlog 留存 + 异地,恢复演练做过至少一次;
  • 主从延迟有 pt-heartbeat 级别的真实监控,而非只看 Seconds_Behind_Source。

Redis 缓存实战 16 篇、MySQL 实战 22 篇,两座系列地标在咖啡馆后山落成。下个系列候选还剩三块地:消息队列(Redis 系列第 7 篇和本系列第 10 篇都埋过钩子)、分布式 ID(第 20 篇挖了坑)、以及 Elasticsearch 检索实战。选哪块,你说了算——咖啡馆不着急,咖啡豆管够。

咖啡凉了,记得趁热喝。

503

10 年全栈工程师 · 503咖啡馆主理人

#MySQL#复盘#性能优化#检查清单#系列收官

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 3 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞