极致RTO回放是openGauss提供的一种加速备机日志回放的高可用功能,能够做到支撑数据库主机重启后快速恢复,RTO < 10s。极致RTO功能是通过对物理日志回放建立多级流水线,将回放的并发度提高到页面级,来提升日志回放速度的。openGauss在该功能的基础上,进一步演进,在开启极致RTO回放模式的备机上同时支持读功能。从而实现了在提升回放速度的同时,让备机分担业务压力,降低成本。
极致RTO支持备机读主要解决了以下两个难题:
-
极致RTO回放模式是按照页面级别的粒度并行回放的,即物理日志会分解成多个不同页面的日志项,分发给多个不同的线程并行去回放,相同页面的日志项回放是串行进行的,不同页面的日志项回放是并行进行的,特别是对于Btree这种通常会生成包含多个页面的物理日志,该机制在明显提升回放效率的同时,也对支持读功能造成了很大的挑战,要能够在不同页面回放进度不一致时保证读数据的一致性;
-
由于openGauss内部是采用的MVCC机制(Multi-Version Concurrency Control 多版本并发控制),历史的备机读特性存在较明显的缺陷,当备机回放到涉及到历史版本数据清理或可见性变更等类型的操作时,如果有持有较旧快照的查询还有可能去访问旧版本数据,那么该操作的回放将暂时被阻塞,直到该查询正常结束,或者等待查询超时发送信号取消查询,而无论是回放阻塞还是查询被取消都对业务影响比较明显。
极致RTO备机读功能通过实现数据页面多版本读机制,解决了以上两个问题。在回放过程中,每当某个页面回放若干次后,生成一次历史版本,当查询操作在访问页面时,可以根据持有快照中的信息,选择一个基准版本的页面,再按需回放若干次后,来获得正确的页面版本。因此,即使不同页面的回放进度不一致,也能够获取到正确的历史版本页面从而保证读数据的一致性;并且,对于持有较旧快照的长查询,也不会和回放产生冲突,不会阻塞回放,从而避免了备机读业务对备机回放速度的影响,同时也大大降低了备机上查询被取消的概率。
欢迎大家体验社区最新发布的创新版本openGauss 5.1.0版本:https://opengauss.org/zh/download/