作用
实现rc和rr的隔离级别
1. 一致性视图
1.1 组成部分
1.creator_trx_id 创建当前ReadView的事务id
2.m_ids 创建视图时的活跃事务id集合 -- 活跃事务:还未提交的事务
3.min_trx_id 最小活跃事务id -- m_ids中的最小者
4.max_trx_id 创建ReadView时,最大事务id+1
1.2 数据版本可见性判定
当一个数据版本的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. 在普通开启事务且第一条select语句执行
情况2. 使用 START TRANSACTION WITH CONSISTENT SNAPSHOT;语句,开启事务并立刻创建ReadView
2.undolog
2.1 数据版本
一行数据会有与mvcc有关的隐形字段:
trx_id 最后一次修改这行记录的事务 ID
roll_pointer 指向上一版本 undo log 的指针
2.2 作用
1.回滚事务
2.计算前一个版本数据,根据ReadView和数据的trx_id寻找可见性版本数据
3.mvcc整体逻辑
通过ReadView的机制判定可见的数据版本,从最新的数据版本trx_id开始判定,如果不符合可见性,就使用undolog计算前一个版本的数据和trx_id,如此循环直到找到可见的版本数据
评论区