作用
1. 一致性视图
1.1 组成部分
1 2 3 4
| 1.creator_trx_id 创建当前ReadView的事务id 2.m_ids 创建视图时的活跃事务id集合 3.min_trx_id 最小活跃事务id 4.max_trx_id 创建ReadView时,最大事务id+1
|
1.2 数据版本可见性判定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 当一个数据版本的trx_id
< min_trx_id 时:表示在创建ReadView时,该事务已提交
= creator_trx_id :表示该版本的数据为自己修改的
not in m_ids :表示在创建ReadView时,该事务已提交
> max_trx_id :表示在创建ReadView时,该事务未创建
in m_ids :表示在创建当前ReadView时,该事务未提交
|
1.3 创建ReadView的时机
读已提交 (rc) :在每一次select语句时
可重复读(rr) :
1 2
| 情况1. 在普通开启事务且第一条select语句执行 情况2. 使用 START TRANSACTION WITH CONSISTENT SNAPSHOT;语句,开启事务并立刻创建ReadView
|
2.undolog
2.1 数据版本
1 2 3
| 一行数据会有与mvcc有关的隐形字段: trx_id 最后一次修改这行记录的事务 ID roll_pointer 指向上一版本 undo log 的指针
|
2.2 作用
1 2
| 1.回滚事务 2.计算前一个版本数据,根据ReadView和数据的trx_id寻找可见性版本数据
|
3.mvcc整体逻辑
通过ReadView的机制判定可见的数据版本,从最新的数据版本trx_id开始判定,如果不符合可见性,就使用undolog计算前一个版本的数据和trx_id,如此循环直到找到可见的版本数据