中间件速查手册
关系型数据库多版本并发控制

MVCC 是什么?

靠 undo log 版本链 + ReadView 实现「读不加锁」

类比:文档的历史版本,你读的是打开那一刻的那一版

它解决什么

读写互相阻塞是数据库性能大敌。MVCC 让读操作读取一个历史快照,不需要加锁,写操作也不阻塞读,从而大幅提升并发。

怎么实现的

每行记录有隐藏字段:最近修改它的事务 ID(DB_TRX_ID)和指向 undo log 旧版本的指针(DB_ROLL_PTR)。

  • 版本链:每次修改都把旧值写进 undo log,串成链表
  • ReadView:事务开始时记录当前活跃事务 ID 列表
  • 可见性判断:沿版本链找第一个「已提交且早于快照」的版本
  • RC 每条语句新建 ReadView,RR 只在第一次查询时建

副作用

长事务会导致 undo log 无法清理,版本链越来越长,查询变慢、表空间膨胀。这也是「不要写长事务」的技术原因。

它出现在这些中间件里

相关问题

相关概念