三种回放模式及备机读
Redo Log(本章节统一称Xlog)是用于恢复已确认但未写入数据库的数据,记录数据修改后的值。GaussDB备机通过同步Xlog并进行回放实现主备机数据同步。流式同步原理如图1所示。
- 主机会话线程在数据更新时优先确保Xlog写入磁盘。
- walsender线程持续将已落盘的本地Xlog传输至备机的walreceiver进程。
- 备机walwriter进程将接收的Xlog写入磁盘,并向主机反馈接收位置、刷盘位置及当前回放位置,主机根据此信息完成多数派同步决策。
- 备机回放线程读取本地Xlog并执行回放操作,完成实际数据同步。
串行回放
并行回放
利用现代CPU多核处理能力,针对回放日志流程中耗时最长的“回放日志流程”分配多个线程,将回放日志任务按照relation粒度分发到多个线程同时处理,显著提升并行度。并行回放日志分发模型如图2所示。
极致RTO回放
回放优化基于现代CPU多核处理能力,将回放流程拆解为多级流水线架构,包含独立的事务回放pipeline及多个数据回放pipeline,实现按页面粒度分发Xlog执行回放。极致RTO回放原理如图3所示。
相较于并行回放模式,极致RTO回放通过进一步提升并行度并构建多级流水线架构,每条流水线由page manager将Xlog分发至多个page worker并行处理。
单节点CN/DN极致RTO备机读机制:
引入多版本读机制:当页面回放导致历史版本数据被覆盖时,日志系统将记录历史版本页面的base page;其余Xlog以LSN链形式持久化存储。读操作根据快照LSN判断应读取最新页面或历史版本页面。极致RTO备机读原理如图4所示。
读线程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操作的冲突。



