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

三种回放模式及备机读

Redo Log(本章节统一称Xlog)是用于恢复已确认但未写入数据库的数据,记录数据修改后的值。GaussDB备机通过同步Xlog并进行回放实现主备机数据同步。流式同步原理如图1所示。

图1 流式同步原理
  1. 主机会话线程在数据更新时优先确保Xlog写入磁盘。
  2. walsender线程持续将已落盘的本地Xlog传输至备机的walreceiver进程。
  3. 备机walwriter进程将接收的Xlog写入磁盘,并向主机反馈接收位置、刷盘位置及当前回放位置,主机根据此信息完成多数派同步决策。
  4. 备机回放线程读取本地Xlog并执行回放操作,完成实际数据同步。

串行回放

  • 按主机记录的顺序依次回放Xlog。
  • 单个CN/DN实例串行回放备机读:

    备机读线程在首次打开relation时,会获取当前备机回放的最新Global Xmin作为自身snapshot xmin,并以此快照执行读操作。

    事务状态由csn committing、csn committed两条Xlog组成;当备机回放完csn committed日志后,该事务可见。

  • Page clean up(VACUUM)日志冲突:

    当备机回放VACUUM日志时,若与备机snapshot中xmin较小的读事务冲突,此类读会话将在超过max_standby_streaming_delay阈值后被强制终止。

并行回放

利用现代CPU多核处理能力,针对回放日志流程中耗时最长的“回放日志流程”分配多个线程,将回放日志任务按照relation粒度分发到多个线程同时处理,显著提升并行度。并行回放日志分发模型如图2所示。

图2 并行回放日志分发模型
  • 备机通过walreader顺序读取Xlog,根据relation id分发至不同redo worker线程并行处理。
  • 事务提交的Xlog由独立的事务回放线程进行回放。
  • 单个CN/DN实例上的并行回放备机读:

    查询与回放冲突的解决机制与串行回放模式一致。

  • 由于并行回放采用文件级并行机制,某一时刻可能出现索引与表回放速度差异导致的两种异常场景:
    1. 索引回放比表快,索引Tuple指向的Heap Tuple尚未写入Heap。
    2. 索引回放比表慢,指向Heap的索引Tuple尚未写入索引。

    在情况1下,索引回放比表快,索引扫描相关操作符先访问索引,再访问表,会出现tid不存在或者页面不存在报错。

极致RTO回放

回放优化基于现代CPU多核处理能力,将回放流程拆解为多级流水线架构,包含独立的事务回放pipeline及多个数据回放pipeline,实现按页面粒度分发Xlog执行回放。极致RTO回放原理如图3所示。

图3 极致RTO回放原理

相较于并行回放模式,极致RTO回放通过进一步提升并行度并构建多级流水线架构,每条流水线由page manager将Xlog分发至多个page worker并行处理。

单节点CN/DN极致RTO备机读机制:

引入多版本读机制:当页面回放导致历史版本数据被覆盖时,日志系统将记录历史版本页面的base page;其余Xlog以LSN链形式持久化存储。读操作根据快照LSN判断应读取最新页面或历史版本页面。极致RTO备机读原理如图4所示。

图4 极致RTO备机读原理

读线程select backend1执行涉及多个页面的读操作时,在打开relation阶段会获取当前极致RTO快照(如快照125),提取该relation1的base page 100,回放LSN链上的Xlog直至达到读快照LSN阈值,随后依次获取relation2等其他数据页的base page并回放对应LSN链上的Xlog,最终整合所有页面数据完成历史版本读操作。

针对引发物理数据页删除的部分DDL操作,如VACUUM、DROP TABLE、TRUNCATE TABLE、DROP DATABASE,增加延迟删除机制,同时通过系统表MVCC机制与syscache的invalid msg机制协同实现系统表的多版本处理,有效解决查询与回放此类DDL操作的冲突。

相关文档