贝利信息

SQL MVCC 的核心思想

日期:2026-01-19 00:00 / 作者:舞夢輝影
MVCC通过为数据保留多个历史版本,使事务基于启动时刻的一致性快照读取,实现读写互不阻塞;其依赖版本链、Read View和DB_TRX_ID/DB_ROLL_PTR等隐藏字段,避免锁冲突,提升并发性能。

MVCC 的核心思想是:为数据保留多个历史版本,让每个事务基于自身启动时刻看到一个一致性的快照,从而实现读写互不阻塞。

多版本共存,不覆盖原数据

每次更新或删除一行时,InnoDB 不直接覆盖原有记录,而是生成一个新版本,并用 DB_ROLL_PTR 指针把新旧版本串联成一条“版本链”。原始数据依然保留,供其他事务按需读取。

快照读与事务隔离绑定

事务开始时,数据库会记录一个“一致性视图”(Read View),其中包含当时活跃事务 ID 列表和最小/最大事务 ID。后续所有 SELEC

T 都依据这个视图判断哪些版本可见——只读取在该视图下“已提交且可见”的版本。

隐藏字段支撑版本管理

InnoDB 自动为每行添加三个关键隐藏列:

解决传统锁机制的根本痛点

在纯锁方案中:

MVCC 绕开了这个冲突:读走历史版本,写建新版本,双方无需等待对方释放锁,显著提升并发吞吐量,尤其适合读多写少的业务场景。