一天一道面试题——数据库篇7(MVCC)

MVCC是什么

MVCC就是用同一份数据临时保留多版本的方式的方式,实现并发控制。,快照读可以使普通的SELECT 读取数据时不用对表数据进行加锁,从而解决了因为对数据库表的加锁而导致的两个如下问题

  • 解决了因加锁导致的修改数据时无法对数据读取问题;
  • 解决了因加锁导致读取数据时无法对数据进行修改的问题;

MVCC的实现

InnoDB中使用版本链和ReadView实现MVCC。

隐藏列

DB_TRX_ID(表示最近修改该行数据的事务ID)列,DB_ROLL_PTR(指向该行回滚段的指针)列。

版本链

通过DATA_ROLL_PTR,可以读取历史版本数据。
历史版本数据是在undolog

ReadView

ReadView记录的属性

  • 最小活动事务ID
  • 最大活动事务ID
  • 活动事务ID集合
  • 当前事务ID。

判断是否可读

  • 小于最小活动事务ID,可读。
  • 大于最大活动事务ID,可读。
  • 之间,在集合中,不可读,不在集合中,可读。

ReadView生成时机

  • READ COMMITTED —— 每次读取数据前都生成一个ReadView。
  • REPEATABLE READ —— 在第一次读取数据时生成一个ReadView。

你可能感兴趣的:(一天一道面试题——数据库篇7(MVCC))