MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种通过保存数据的多个版本来实现并发控制的机制,常见于 MySQL(InnoDB)、PostgreSQL、Oracle 等数据库。它的核心目标是:在不加锁(或尽量减少锁)的情况下,提高并发性能,同时避免并发冲突。
下面从「并发冲突有哪些」「MVCC 如何解决」两个层面说明。
在事务并发时,可能出现:
读不阻塞写,写不阻塞读
MVCC 通过:
每行记录包含:
DB_TRX_ID:最后修改该版本的事务 IDDB_ROLL_PTR:回滚指针,指向 Undo Log 中的旧版本每次更新:
roll_ptr 形成版本链事务启动时生成 ReadView,包含:
通过 ReadView 判断:
MVCC 只解决读写冲突,写写冲突靠:
MVCC 通过“数据多版本 + 快照读 + 可见性判断”,让读和写互不阻塞,从而解决读写并发冲突;写写冲突仍由锁机制保证。
如果你愿意,我也可以用示意图或结合具体 SQL 事务示例来讲 MVCC。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。