MySQL 锁和 MVCC 怎么建索引:锁类型、死锁、快照读和当前读

1次阅读
没有评论

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 锁专题可以按这个结构维护:

  1. 锁基础和事务隔离。
  2. 死锁案例与处理。
  3. 存储引擎锁实现。
  4. LBCC 与 MVCC。
  5. 异常现象入口。

这样遇到事务问题时,可以先定位属于哪类,再深入查对应专题。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-05发表,共计631字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)