更新时间:2025-08-28 GMT+08:00
分享

RCR Uheap可见性机制

Ustore可见性判断是通过构建数据行的一致性版本获得的,老快照可通过Undo记录获取历史版本。举例如下:

图中描述了三种使用 MVCC 快照查询的场景,其中 Reader 为查询线程,持有 csn = 300 的快照,需要查询某行数据的可见版本:

  1. 该行数据指向的 td 槽位记录事务 xid 已经提交,并且 td csn < 快照 csn,说明 td xid 对快照可见。又因为生成该行数据页面版本的事务 xid 一定小于 td 上记录的 xid,并且已经提交,因此该数据的页面最新版本也对快照可见,因此页面最新版本即为快照可见版本。
  2. 该行数据指向的 td 槽位记录事务 xid 已经提交,但是 td csn > 快照 csn,对快照不可见,因此需要从新到旧遍历 undo 链,寻找对快照可见版本(事务 xid 已提交,并且事务 csn < 快照 csn),最终找到 csn 为 200 的版本。
  3. 复用 td 槽位的事务未 in-progress 状态,td xid 对快照不可见,因此同样需要从新到旧遍历 undo 链,寻找对快照可见版本。遍历结束后,发现链上找不到对应 undo,说明通过生成该元组页面版本的事务生成的 undo 也已经被回收掉,进而说明该元组的所有版本都已经对所有快照可见,页面最新版本即为可见版本。

相关文档