InnoDB事务实现原理-MVCC

2021-02-13  本文已影响0人  l1n3x

InnoDB 一共支持四种等级的事务:

其中读未提交实现最简单,每次读最新的记录即可。而串行化则是通过加锁完成的。其中读已提交和读未提交是通过 MVCC 实现的,其基本原理都相同。

版本链

对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列:

同样,undo log 中也存在 trx_id 以及 roll_pointer 指针。roll_pointer 指向该 undo log 上一个版本的 undo log。因此修改的记录根据 roll_pointer 就形成了链表,这条链表中的所有值就是形成了版本链。

ReadView

ReadView 是实现读以提交和可重复度的实现方式。其实现原理,则是对于查询的字段,寻找其版本链上对当前 ReadView 的版本。例如,读已提交隔离等级下,未提交的事务所修改产生版对当前 ReadView 就是就是不可见的。

ReadView 中包含四个比较重要的概念:

有了这个ReadView,这样在访问某条记录时,只需要按照下边的步骤判断记录的某个版本是否可见:

读已提交以及可重复读实现的方式只是生成 ReadView 时机不同:

上一篇 下一篇

猜你喜欢

热点阅读