更新时间:2026-07-28 GMT+08:00
RCR Uheap可见性机制
Ustore可见性判断是通过构建数据行的一致性版本获得的,老快照可通过Undo记录获取历史版本。举例如下:
图中描述了三种使用MVCC快照查询的场景,其中Reader为查询线程,持有csn = 300的快照,需要查询某行数据的可见版本:
- 该行数据指向的td槽位记录事务xid已经提交,并且td csn < 快照csn,说明td xid对快照可见。又因为生成该行数据页面版本的事务xid一定小于td上记录的xid,并且已经提交,因此该数据的页面最新版本也对快照可见,页面最新版本即为快照可见版本。
- 该行数据指向的td槽位记录事务xid已经提交,但是td csn > 快照csn,对快照不可见,因此需要从新到旧遍历Undo链,寻找对快照可见版本(事务xid已提交,并且事务csn < 快照csn),最终找到csn为200的版本。
- 复用td槽位的事务为in-progress状态,td xid对快照不可见,因此同样需要从新到旧遍历Undo链,寻找对快照可见版本。遍历结束后,发现链上找不到对应Undo,说明通过生成该元组页面版本的事务生成的Undo也已经被回收掉,进而说明该元组的所有版本都已经对所有快照可见,页面最新版本即为可见版本。

父主题: RCR Uheap