跳转至

MVCC 实现原理

一、是什么

多版本并发控制,读写不阻塞。

二、组成

  • 隐藏字段(trx_id、roll_ptr)。
  • undo log(版本链)。
  • ReadView。

三、版本链

每行数据有 roll_ptr,指向上一个版本。

row1 (trx_id=100) → undo (trx_id=90) → undo (trx_id=80)

四、ReadView

事务开始时生成:

m_ids: [100, 200]
min_trx_id: 100
max_trx_id: 300
creator_trx_id: 150

五、可见性判断

沿版本链找:

  1. trx_id == creator:可见。
  2. trx_id < min:可见。
  3. trx_id >= max:不可见。
  4. 在 m_ids 里:不可见。

找到第一个可见的版本。

六、RC vs RR

  • RC:每次 select 新 ReadView。
  • RR:事务开始时一个 ReadView。

七、好处

  • 读写不阻塞。
  • 提高并发。

一句话

MVCC = undo 版本链 + ReadView 判断可见性。