D
RuntimeScope/MySQL 面试专题/operations/工程场景与排障

参考:高性能 MySQL(第 4 版) · MySQL 技术内幕:InnoDB 存储引擎(第 2 版) · MySQL 8.4 Reference Manual。每章含可暂停 Lab 动画 + 面试问答 + 书籍章节对照。

MySQL 面试 · Lab E · 工程场景与排障

工程场景与排障

主问题

-- 线上某接口 p99 突然飙高,疑似慢查询

你怎么一步步定位、优化、验证、回滚?

这题真正考什么

  • · 不是考你会不会说「加个索引」。
  • · 而是考你有没有从定位到验证回滚的完整排查闭环。

学完你要能做到

  • · 按证据链分层排查慢查询,而不是猜
  • · 说清缓存一致性的失败窗口和补偿
  • · 给出死锁的根因治理 + 幂等重试
  • · 设计可灰度、可回滚的索引上线方案
30 秒答案先记结论,再看推导

按闭环来:先从慢日志 / APM 定位具体 SQL,再EXPLAIN 读访问路径。

给出加索引 / 改 SQL 方案并评估写放大,然后小流量验证p95 和扫描行数。

最后可回滚地上线 —— 不会一上来就盲目加索引。

学习路线

点节点跳转 · 滚动时自动高亮当前位置

01

这道题到底在问什么?

表面问「怎么排查慢接口」,实际是在考你有没有从定位到验证回滚的完整闭环, 而不是只会说「加个索引」。

差的回答

「慢就加个索引嘛。」

想听到的

定位 → 读计划 → 改造 → 验证 → 回滚。

02

先定位,再动手

「接口慢」不等于「SQL 慢」,先分清慢在哪一层。

DB 层

SQL / 索引 / 锁

慢日志 + EXPLAIN + 锁等待,定位访问路径、回表和锁竞争。

应用 / 网络

不一定在 DB

连接池耗尽、序列化、GC、跨服务调用,也会让接口 p99 飙高。

资源瓶颈

CPU / IO / 内存

Buffer Pool 命中、脏页刷盘、磁盘 IO 也要一起看,别只盯 SQL。

结论先分清「慢在哪一层」,再决定动 SQL 还是动架构。定错层,后面全白做。
03

排查闭环怎么走(Lab)

逐步走一遍五段式闭环,每一步都绑定「怎么说 / 常见误区」。

1
定位证据
2
读执行计划
3
给改造方案
4
小流量验证
5
可回滚上线

当前发生了什么

从接口 p99 / 慢日志 / APM 找到具体 SQL 和时间窗口,分清慢在 DB 还是应用 / 网络 / 锁等待。

为什么会这样

不先定位就优化,很容易优化错对象。

面试怎么回答

我会先拿证据:慢日志、EXPLAIN、锁等待、资源曲线,而不是直接加索引。

常见误区

误区:一上来就加索引,把锁等待 / 连接池耗尽都当成 SQL 慢。

结论定位证据 → 解释机制 → 改造方案 → 验证回滚,这条闭环比任何单点技巧都重要。
04

缓存和数据库怎么保持一致?

面试常考的 cache aside,关键是承认「短暂不一致」并补偿。

读路径Cache Aside
  1. 1先读缓存
  2. 2命中直接返回
  3. 3未命中查 DB 再回填
写路径先更 DB 再删缓存
  1. 1更新数据库
  2. 2删除缓存(不是改缓存)
  3. 3失败靠重试 / 消息 / CDC 补偿
结论cache aside 要承认短暂不一致:用过期时间 + 幂等消费 + 监控收敛风险,别声称强一致。
05

死锁后应用怎么处理?

死锁不是要完全避免,而是降低概率 + 安全重试 + 根因治理。

降低概率

短事务 + 固定顺序

缩短持锁时间,多表访问固定加锁顺序,避免形成等待环。

缩小锁范围

用合适索引

精确索引避免大范围锁定,减少锁冲突面,从根因降低死锁。

幂等重试

捕获后有限重试

捕获 deadlock / lock wait timeout,对幂等操作做带上限的退避重试。

结论死锁不是数据库 bug——应用要捕获、对幂等操作有限重试,再用死锁日志定位反向加锁顺序或缺索引。
06

工程取舍对比

四个高频场景,把「常见错误归因」换成「正确做法」。

问题常见错误归因正确做法
接口慢都怪 SQL,盲目加索引先分层定位,再对症优化
缓存一致以为缓存能强一致cache aside + 补偿,承认短暂不一致
死锁当成数据库 bug 不处理降低概率 + 幂等重试 + 根因治理
深分页直接大 offset 扫描seek pagination / 业务游标
07

面试回答生成器

按时间预算选一档念出来。

我会按闭环来:先从慢日志 / APM 定位具体 SQL,再 EXPLAIN 读访问路径,给出加索引 / 改 SQL 的方案并评估写放大,然后小流量同口径验证 p95 和扫描行数,最后可回滚地上线。

不会一上来就盲目加索引。

08

追问链 + 复习清单

勾掉每一条,这道题就算通关。

通关检查

0/5 已掌握

追问链

  • Q如何设计可回滚的索引上线方案?
  • Q热点库存扣减如何降低锁冲突?
  • Qbinlog / CDC 延迟时缓存如何兜底?