openGauss新功能:極致RTO回放支持備機讀
極致RTO回放是openGauss提供的一種加速備機日志回放的高可用功能,能夠做到支撐數據庫主機重啟后快速恢復,RTO < 10s。極致RTO功能是通過對物理日志回放建立多級流水線,將回放的并發(fā)度提高到頁面級,來提升日志回放速度的。openGauss在該功能的基礎上,進一步演進,在開啟極致RTO回放模式的備機上同時支持讀功能。從而實現了在提升回放速度的同時,讓備機分擔業(yè)務壓力,降低成本。

極致RTO支持備機讀主要解決了以下兩個難題:
極致RTO回放模式是按照頁面級別的粒度并行回放的,即物理日志會分解成多個不同頁面的日志項,分發(fā)給多個不同的線程并行去回放,相同頁面的日志項回放是串行進行的,不同頁面的日志項回放是并行進行的,特別是對于Btree這種通常會生成包含多個頁面的物理日志,該機制在明顯提升回放效率的同時,也對支持讀功能造成了很大的挑戰(zhàn),要能夠在不同頁面回放進度不一致時保證讀數據的一致性;
由于openGauss內部是采用的MVCC機制(Multi-Version Concurrency Control 多版本并發(fā)控制),歷史的備機讀特性存在較明顯的缺陷,當備機回放到涉及到歷史版本數據清理或可見性變更等類型的操作時,如果有持有較舊快照的查詢還有可能去訪問舊版本數據,那么該操作的回放將暫時被阻塞,直到該查詢正常結束,或者等待查詢超時發(fā)送信號取消查詢,而無論是回放阻塞還是查詢被取消都對業(yè)務影響比較明顯。
極致RTO備機讀功能通過實現數據頁面多版本讀機制,解決了以上兩個問題。在回放過程中,每當某個頁面回放若干次后,生成一次歷史版本,當查詢操作在訪問頁面時,可以根據持有快照中的信息,選擇一個基準版本的頁面,再按需回放若干次后,來獲得正確的頁面版本。因此,即使不同頁面的回放進度不一致,也能夠獲取到正確的歷史版本頁面從而保證讀數據的一致性;并且,對于持有較舊快照的長查詢,也不會和回放產生沖突,不會阻塞回放,從而避免了備機讀業(yè)務對備機回放速度的影響,同時也大大降低了備機上查詢被取消的概率。