MVCC的原理

94 阅读1分钟

MVCC底层主要通过三部分实现

  1. 隐藏字段
  2. undo log日志
  3. Read View读视图

隐藏字段

隐藏字段包括trx_id事务id,他的一个自增的事务id,当数据被修改时,事务id会自增。

另一个隐藏字段是roll_pointer回滚指针,他用于指向上一个版本的事务地址,用于undo log中。

undo log

undo log主要用于回滚日志,他存储了一个版本链,记录不同事务修改数据的版本,通过roll_pointer回滚指针形成一个链表

Read View

Read View类似于一个数据快照,他内部主要有四个字段

  • m_ids :当前活跃事务的事务 id 列表

    注意是一个列表, “活跃事务”指的就是,启动了但还没提交的事务

  • min_trx_id :id列表中最小事务id

  • max_trx_id :当前最大事务id + 1

  • creator_trx_id :Read View创建者的id。

通过这些字段以及一些比较规则,使其最终访问不同的结果

并且在不同隔离级别中,Read View的生成时机不一样,比如说在RC(读已提交)隔离级别中,每次select前都会生成Read View,而在RR(可重复读)隔离级别中,只会在第一次select前生成Read View