read view核心组成
1.1 事务id相关
- creator_trx_id: 创建该read view的事务id
每开启一个事务都会生成一个 ReadView,而 creator_trx_id 就是这个开启的事务的 id。
- m_ids: 创建read view时系统的活跃事务(未提交的事务)id集合
当前有哪些事务正在执行且还没有提交,这些事务的id就存在这里
- min_trx_id: 创建read view时系统中最早的活跃事务id
指的是创建的活跃事务id集合里最小的事务id,即最早加入的活跃事务id
- max_trx_id: 创建read view时系统将分配给下一个事务的id
指的是下一个要生成的事务id,下一个要生成的肯定比所有id都要大
1.2 版本链指针
- 指向当前数据行的版本链,用于遍历不同版本数据
read view工作原理
1.1 可见性判断
- 行的事务id < 最小的活跃事务集合id:该版本已经提交,可见。
- 行的事务id > 最大的活跃事务集合id:该版本由将来事务创建,不可见。
- 最小的活跃事务集合id <= 行事务id < 最大的活跃事务集合id:
- 如果行事务id在活跃事务id集合中:事务还没有提交,不可见。
- 如果行事务id已经不在活跃事务id集合中:事务已经提交,可见。
- 如果行事务id = 创建时生成的事务id:证明时当前事务对自己的修改,可见。
总结:当事务id在活跃事务id集合,或者大于活跃事务id集合中最大的活跃事务id时,这个版本不可见。
https://github.com/0voice