MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种在不加锁或尽量少加锁的情况下,实现高并发读写的数据库技术。核心思想是:为数据保存多个版本,读操作读旧版本,写操作生成新版本,从而避免读写互相阻塞。
下面以 InnoDB(MySQL) 为例,系统说明 MVCC 如何实现多版本控制。
InnoDB 每行记录中隐藏了关键字段:
DB_TRX_ID(事务 ID)DB_ROLL_PTR(回滚指针)DB_ROW_ID(可选)roll_ptr 形成版本链示例:
最新版本 ──> 旧版本 ──> 更旧版本 ──> ...
Read View 决定“我能看到哪个版本”
包含:
当一个事务读取一行数据时:
只读取“对自己可见”的版本
判断规则(简化版):
DB_TRX_ID < 最小活跃事务 IDDB_TRX_ID 在活跃事务列表中DB_TRX_ID ≥ 下一个事务 IDSELECT 都生成新的 Read ViewSELECT 时生成 Read ViewDB_TRX_ID 和 DB_ROLL_PTR如果你愿意,我也可以:
你想从哪一块继续深入?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。