数据库引入 MVCC(Multi-Version Concurrency Control,多版本并发控制),核心目的是 在保证数据一致性的前提下,提高并发性能,减少锁的使用。下面从问题背景、MVCC 解决的问题、以及它带来的好处来解释。
在早期的数据库并发控制中,常用 锁机制 来保证一致性,比如:
例如:
这会造成:
对同一数据保存多个版本,读写互不阻塞
MVCC 的基本思路是:
✅ 读不加锁
✅ 写不阻塞读
✅ 读不阻塞写
| 场景 | 锁机制 | MVCC |
|---|---|---|
| 读-写 | 冲突 | 不冲突 |
| 写-读 | 冲突 | 不冲突 |
| 并发度 | 低 | 高 |
MVCC 配合事务快照(Read View)可以实现:
而无需频繁加锁。
例如 MySQL InnoDB:
SELECT * FROM orders WHERE id = 1;
以 MySQL InnoDB 为例:
trx_id(最后修改事务 ID)roll_pointer(指向 undo log)事务开始时创建 Read View,用来判断:
数据库引入 MVCC,是为了在不加锁的情况下实现高并发读取,同时保证事务隔离性和数据一致性。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。