什么是 MVCC?
MySQL 面试题发布于
一、定义
MVCC(Multi-Version Concurrency Control,多版本并发控制),通过维护数据的多个历史版本,实现读写不阻塞,提高并发性能。
二、实现要素
- 隐藏字段:每行有
trx_id(创建该版本的事务 ID)和roll_pointer(指向 undo log 中的上一版本)。 - undo log:存储旧版本数据,形成版本链。
- Read View:事务启动时生成的快照,记录活跃事务 ID 列表,用于判断版本可见性。
三、可见性规则
- 版本的 trx_id < Read View 中最小活跃 ID → 可见。
- 版本的 trx_id > Read View 中最大活跃 ID → 不可见。
- 在活跃列表中 → 不可见,沿版本链找上一版本。
四、效果
- RC 级别:每次 select 都生成新 Read View。
- RR 级别:只在第一次 select 生成 Read View,后续复用。