为什么要在南极建站,高埗镇做网站,erp系统软件有哪些,小蓝网页浏览器准备
CreateCheckpoint#xff0c;或者bgwriter启动时#xff0c;或者创建logicalreplicationslot时都会调用LogStandbySnapshot 记录一个XLOG_RUNNING_XACTS类型的日志。日志中记录了所有提交的事务的xid(HistoricSnapshot)
启动#xff08;SNAPBUILD_BUILDING_SNAPSHOT或者bgwriter启动时或者创建logicalreplicationslot时都会调用LogStandbySnapshot 记录一个XLOG_RUNNING_XACTS类型的日志。日志中记录了所有提交的事务的xid(HistoricSnapshot)
启动SNAPBUILD_BUILDING_SNAPSHOT
当接收端读到 XLOG_RUNNING_XACTS 时调用SnapBuildProcessRunningXacts开始记录所有看到的日志但此时只知道提交的事务不知道进行中的事务。在没有完整事务状态的情况下接收端是不能开始apply日志的。这时日志中记录的 nextxid(1) 就是这之后再开启事务时的最小事务号。
组装事务状态SNAPBUILD_FULL_SNAPSHOT
当接收端再收到 XLOG_RUNNING_XACTS 时如果发现nextxid(1)之前的日志都提交了就证明当前从日志收集过的事务已经是全部在运行的事务了没有不知道的事务此时事务状态是完整的但因为之前收到的非事务的 log 都人为丢弃了不能对这些事务 apply log因为事务不完整这时nextxid()记录的就是之后再开启事务的时的最小事务号 。 这时每次 apply 前要判断要 apply 的这个事务的xid是否在nextxid()之前如果是之前的就不apply之后的才applySnapBuildProcessChange。 第一次apply的时候会记录一个完整的HistoricSnapshot作为basesnapshot 事务状态已完整SNAPBUILD_CONSISTENT
当接收端再收到 XLOG_RUNNING_XACTS 时如果发现nextxid()之前的日志都提交了说明以后收到的 log一定可以 apply不用再做上面的判断了。 第一次到这个状态时会写一个.snap文件
新的事务提交日志(SnapBuildCommitTxn)
在每次处理事务提交日志时它会感知所有修改系统表的事务把它们加入新snapshot中SnapBuildAddCommittedTxn并把这个新的 snapshot 挂到所有事务的reorderbuffer中SnapBuildDistributeNewCatalogSnapshot。当其它事务commit时DecodeCommit检查reorder_bufferReorderBufferCommit就会 apply 这个 snapshot TeardownHistoricSnapshot SetupHistoricSnapshot