多版本并发控制(MVCC,Multi-Version Concurrency Control)是一种通过保存数据的多个版本来实现并发读写互不阻塞的机制,广泛用于 MySQL(InnoDB)、PostgreSQL、Oracle 等数据库。
下面从核心思想 → 常见实现方式 → 以 MySQL InnoDB 为例 → 优缺点来讲。
读不加锁,写不阻塞读
结果:
大多数数据库 MVCC 都依赖以下组件:
每行数据通常包含:
InnoDB 每行包含:
DB_TRX_ID:最后修改该行的事务 IDDB_ROLL_PTR:指向 undo log 中的旧版本事务在读数据时生成 ReadView,包含:
对某一行版本:
DB_TRX_ID < 当前事务 ID 且已提交 → 可见DB_TRX_ID 在活跃事务中 → 不可见DB_TRX_IDDB_ROLL_PTRT1: BEGIN
T2: BEGIN
T2: UPDATE user SET age=20 WHERE id=1;
T1: SELECT age FROM user WHERE id=1; -- 看到旧值
T2: COMMIT
T1: SELECT age FROM user WHERE id=1; -- 仍看到旧值(RR)
✅ 无锁读
✅ 一致性视图
MVCC 通过“保存多个数据版本 + 事务快照 + 可见性规则”,实现无锁一致性读,是数据库高并发的核心技术。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。