
snapshot.xmin:获取快照时记录当前活跃的最小的xidsnapshot.snapshotcsn:当前最新提交的CSN号 + 1如上图6所示,xid对于当前快照是否可见的简化有步骤如下:
(1) xid < snapshot.xmin,事务在快照开始前已经结束,根据CLOG状态判断是否提交:CLOG显示已提交,可见;否则,不可见。
(2) xid≥snapshot.xmin,事务在快照开始前未结束,根据CSNLOG读取xid对应的CSN。
(3) 如果CSN已提交,即CSN≥3,没有子事务标志,没有正在提交标志。如果CSN< snapshot.snapshotcsn,则可见,否则不可见。
(4) 如果CSN正在提交,则等待事务结束,重入(3)判断。
(5) 其他情况,不可见。

图7为新节点快照可见性判断流程图。bucketxid:bucket粒度,在当前库,新节点产生的最小xidbucketcsn:bucket粒度,在当前库,来自源节点的最大CSNbucket上线后,CLOG和数据文件已搬迁,CSNLOG未搬迁。CLOG拆分后对可见性判断:老快照判断迁移数据的可见性:报错。因为CSNLOG未搬迁,无法读取CSN号;老快照判断新数据的可见性:元组是在bucket上线后插入的,即tuple.xmin > bucketxid。不可见;新快照判断迁移数据的可见性:通过CLOG;新快照判断新数据的可见性:正常可见性判断逻辑;



被折叠的 条评论
为什么被折叠?



