
# 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也已经被回收掉，进而说明该元组的所有版本都已经对所有快照可见，页面最新版本即为可见版本。
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620640637.png "点击放大")
