MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库(如 MySQL InnoDB、PostgreSQL、Oracle 等)用来在保证数据一致性的前提下,提高并发性能的核心机制。
下面从“为什么能支持高并发”以及“它是怎么做到的”两个角度说明。
传统锁机制的问题:
MVCC 的核心思想是:
读写不互斥,读历史版本,写新版本
✅ 读不阻塞写
✅ 写不阻塞读
✅ 不同事务看到不同“时间点的数据”
因此:
InnoDB 每行记录包含:
DB_TRX_ID:最后修改该行的事务 IDDB_ROLL_PTR:回滚指针(指向 undo log 中的旧版本)当前行 → undo log(旧版本1) → undo log(旧版本2) → ...
事务启动时(或语句执行时)会生成一个 Read View,包含:
事务只“看得到”:
当读一行数据时:
DB_TRX_ID 是否对当前事务可见roll_ptr 找旧版本✅ 读的是快照
❌ 不需要加锁
| 隔离级别 | MVCC 行为 |
|---|---|
| 读未提交 | 不使用 MVCC |
| 读已提交(RC) | 每条语句新建 Read View |
| 可重复读(RR) | 事务级 Read View(MySQL 默认) |
| 串行化 | 退化为锁 |
MVCC 通过“数据多版本 + 事务快照”,让读和写互不阻塞,从而在高并发场景下显著提升数据库吞吐能力。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。