跳到主要内容

DATA & CACHE · LAYER 05

数据与缓存故障诊断

通过会话、锁等待、执行计划、容量和缓存策略定位数据库慢查询、事务阻塞、写入拒绝与缓存异常,并保护数据一致性。

本层已发布
3 篇
内容标准
隔离复现 · 证据复核
广告状态
栏目页不加载广告

FIRST-RESPONSE GUIDE

本层负责什么

数据与缓存层的故障往往表现为应用整体变慢,但真正原因可能是锁等待、执行计划变化、连接耗尽、容量边界或缓存策略。诊断应从受影响请求追到具体会话和命令,先确认一致性与阻塞关系,再评估索引、事务或容量调整,避免把所有慢请求归因于“数据库性能”。

常见症状

这些现象用于判断排查入口,不代表已经确定根因。先记录原始错误和时间,再执行首轮检查。

  • 查询延迟突然升高、执行计划变化或扫描行数异常
  • 事务等待、死锁、连接池耗尽或活跃会话大量堆积
  • Redis 达到 maxmemory、写入被拒绝或淘汰率异常
  • 缓存命中率骤降、热点键放大后端压力或数据不一致

首轮检查清单

按顺序执行并保存输出。每一步只改变一个变量,避免让恢复动作覆盖真正的失败证据。

  1. 定位具体操作记录请求时间、数据库实例、库表、语句摘要和调用方,避免只看全局平均值。
  2. 检查会话与阻塞确认谁在等待、谁持有锁、事务已持续多久,并保存处理前的证据。
  3. 核对计划与容量查看执行计划、索引命中、内存策略、连接数和磁盘空间,区分结构问题与资源边界。
  4. 设计可回滚验证在代表性数据和相同查询参数下比较改动前后结果,同时验证返回数据一致。

操作边界

读取会话、计划和统计信息通常风险较低,但 EXPLAIN ANALYZE、全表扫描和大范围 key 查询可能产生真实负载。终止事务、添加索引、扩容或调整淘汰策略前必须确认业务影响和回滚方案。

何时升级或切换层级

当证据指向其他系统边界,立即带着时间、环境和原始输出交接,避免在当前层重复执行无关操作。

  • 需要终止生产事务或修改表结构:由数据库负责人评估并审批。
  • 上游请求模式突变或出现重试风暴:把证据交给应用与网关负责人协同处理。
  • 磁盘、文件系统或主机内存成为共同瓶颈:转入系统与安全层。

PUBLISHED & VERIFIED

该层已发布的验证文章

这里只列出已发布且通过 V2CE 证据门禁的文章;草稿和未验证内容不会进入列表。

3 条可执行路径
05
已验证 最后复核 2026-08-12

Redis 返回 OOM,但进程没有退出:定位 maxmemory 与 noeviction

用生效配置、INFO、DBSIZE 和进程状态区分 Redis 逻辑内存上限与容器 OOM,并在不驱逐旧键的前提下验证恢复路…

适用环境
Redis 7.4.10 / Docker 24.0.7 / maxmemory-policy noeviction
验证耗时
约 10 分钟
风险边界
INFO 与 CONFIG GET 为只读取证;提高上限前核对宿主机余量,切换淘汰策略前确认数据可丢失性与回滚限制
查看证据与诊断步骤 →
05
已验证 最后复核 2026-08-06

MySQL EXPLAIN ANALYZE:复合索引是否真的减少了扫描行数

对比预计与实际行数,用同一查询证明从全表扫描切换到复合索引范围扫描,同时评估索引写入成本和生产 DDL 风险。

适用环境
MySQL 8.4.10 / InnoDB / Docker 24.0.7 / 100,000 deterministic rows
验证耗时
约 15 分钟
风险边界
EXPLAIN ANALYZE 会实际执行查询;生产建索引前评估 DDL 锁、空间、写入、redo/binlog 和复制延迟
查看证据与诊断步骤 →
05
已验证 最后复核 2026-08-01

MySQL 行锁等待:用 data_lock_waits 找到真正的阻塞事务

用 Performance Schema 建立等待事务、阻塞事务、锁对象与连接之间的证据链,并区分普通锁等待、超时和死锁。

适用环境
MySQL 8.4.10 / InnoDB / Docker 24.0.7
验证耗时
约 12 分钟
风险边界
诊断查询为低风险;KILL CONNECTION 和生产索引变更必须先确认事务所有者、回滚规模与变更窗口
查看证据与诊断步骤 →

NOT SURE YET?

仍无法确定故障层级?

回到诊断地图,从用户看到的第一个异常开始;按“解析 → 连接 → 网关 → 应用 → 数据 → 系统”的顺序保存证据。

返回六层诊断地图 →