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