Persisted Buffer Pool(PBP)特性能夠幫助您在集群異常退出或者重新啟動時,仍然可以使用集群退出前的Shared Buffer Pool。
前提條件
支持的PolarDB PostgreSQL版(兼容Oracle)的版本如下:
Oracle 2.0(內核小版本2.0.14.2.0及以上)
您可通過如下語句查看PolarDB PostgreSQL版(兼容Oracle)的內核小版本的版本號:
SHOW polar_version;
背景信息
PolarDB PostgreSQL版(兼容Oracle)的內存可以分為Shared Buffer Pool、Dynamic Shared Memory Areas以及進程私有內存三部分:
Shared Buffer Pool:集群啟動時采用預分配的方式建立的一大段共享內存,通過確定offset來對各個功能模塊劃分使用區(qū)間。
Dynamic Shared Memory Areas:進程間動態(tài)共享內存區(qū)。PostgreSQL為實現進程間并行計算設計的共享內存區(qū),可以動態(tài)擴展。
Process Global Area:進程工作使用的內存區(qū)。包含以下兩部分。
Memory Context。
邏輯直接控制的內存。
內存劃分如圖所示:
其中,Shared Buffer Pools在PolarDB PostgreSQL版(兼容Oracle)中使用的內存最多,且對性能有直接影響。原PostgreSQL在集群重啟或者意外退出時,都會對Shared Buffer Pools進行清理和重新初始化。在集群重啟進入到故障恢復狀態(tài)時,會根據WAL日志進行數據頁面的修改,需要重新加載數據甚至修改數據,影響集群可用時間。其次,Shared Buffer Pools的重新初始化將會導致重新加載數據業(yè)務需要的數據,會帶來嚴重的性能抖動。
為了解決以上問題,PolarDB PostgreSQL版(兼容Oracle)增加了Persisted Buffer Pool(PBP)的特性,能夠在集群異常退出或者重新啟動時,仍然可以使用集群退出前的Shared Buffer Pool。優(yōu)勢如下:
減少故障恢復時間,提升系統(tǒng)可用性。
集群退出前后,性能沒有明顯抖動。
原理介紹
PolarDB PostgreSQL版(兼容Oracle)將Shared Buffer Pool的部分內存變?yōu)镻od級生命周期的Persisted Buffer Pool。根據對性能的影響性,PolarDB PostgreSQL版(兼容Oracle)主要將Buffer Pool和Buffer Descriptor兩部分放入了PBP中,其他依舊是Instance級生命周期的內存。
Pod級生命周期:PolarDB PostgreSQL版(兼容Oracle)是部署在K8s上的,Pod級生命周期的共享內存不會隨著集群的退出而銷毀。
Instance級生命周期:在集群退出或者異常退出重啟后進行清理的集群級共享內存。
內存劃分如圖所示:
影響PBP可用性的指標
集群退出前的PBP不是所有場景都適用。在集群啟動時,如果出現以下情況,則無法使用PBP。
集群的規(guī)格改變,需要使用不同大小的Buffer Pool。
當前PBP并非此集群所建立。
當前PBP中的控制信息失效。
除了PBP的整體可用性需要檢查外,每個PBP的頁都需要做可用性檢測。如果出現以下情況,則無法使用當前頁。
當前頁存在未提交的事務。
當前頁的Descriptor信息無效。
當前頁存在無效的LSN。
當前頁的屬性為錯誤或者無效。
影響PBP可用性的指標如圖所示:
PBP的效果
Persisted Buffer Pool在數據庫重啟后,依然能夠使用集群退出前的Buffer Pool。因此,無論在恢復場景還是業(yè)務場景,都能夠快速使用緩存數據,提升性能。如圖所示:
恢復性能對比。
模擬異常退出時的場景,回放日志總大小為2093 MB情況如下:
參數
日志回放耗時
故障恢復耗時
未使用PBP
598s
746s
使用PBP
68s
294s
耗時對比如圖所示:
性能前后對比。
并不是Buffer Pool中所有的頁都是可以復用的。例如:在重啟前,某進程對頁上X鎖,隨后系統(tǒng)宕機了,該X鎖就沒有進程來釋放了。因此,在宕機和重啟之后需要把Buffer Pool的所有頁遍歷一遍,剔除掉不能被復用的頁。另外,Buffer Pool的回收依賴于K8s。使用該優(yōu)化之后,可以使重啟前后的性能更加平穩(wěn)。重啟前后性能對比如圖所示:
使用指南
打開如下參數即可使用。
polar_enable_persisted_buffer_pool = ON
參數的啟用或者關閉需要重啟集群。