MySQL 锁和 MVCC 是排查事务问题的核心主题。整理时不要把所有概念堆到一页,可以先做一个索引,把锁、死锁、引擎实现和 MVCC 分开。
锁基础和事务隔离
第一组是锁基础。
需要理解:
- 行锁。
- 表锁。
- 页锁。
- 共享锁。
- 排他锁。
- 事务 ACID。
- 隔离级别。
- 并发调度问题。
这部分解决“为什么并发会互相影响”的问题。
死锁案例和处理
第二组是死锁。
死锁资料要记录:
- 发生场景。
- 事务执行顺序。
- 涉及索引。
- 更新范围。
- MySQL 诊断信息。
- 处理方式。
- 如何避免。
死锁不是只靠重试解决。重试是兜底,根因通常在事务顺序、索引条件或更新范围。
InnoDB 和 MyISAM 锁实现
第三组是存储引擎锁实现。
例如:
- MyISAM 表锁。
- InnoDB 行锁。
- 意向锁。
- 间隙锁。
- next-key lock。
- 行锁算法。
不同存储引擎的锁行为不同。看锁问题时要先确认表引擎。
LBCC 和 MVCC
第四组是 LBCC 和 MVCC。
这里要理解:
- 当前读。
- 快照读。
- undo log。
- 版本链。
- Read View。
- 可重复读。
理解 MVCC 后,再看“为什么普通 select 不阻塞更新”“为什么当前读会加锁”,会清楚很多。
异常现象交叉入口
锁问题常表现为:
- lock wait timeout。
- 死锁。
- 更新卡住。
- 查询慢。
- 连接池耗尽。
这些现象可以交叉链接到异常排障页,避免锁专题变成所有问题的大杂烩。
维护建议
MySQL 锁专题可以按这个结构维护:
- 锁基础和事务隔离。
- 死锁案例与处理。
- 存储引擎锁实现。
- LBCC 与 MVCC。
- 异常现象入口。
这样遇到事务问题时,可以先定位属于哪类,再深入查对应专题。
正文完




