日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Persistent Buffer Pool

Persisted Buffer Pool(PBP)特性能夠幫助您在集群異常退出或者重新啟動時,仍然可以使用集群退出前的Shared Buffer Pool。

前提條件

支持的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 14(內核小版本14.5.2.0及以上)

  • PostgreSQL 11(內核小版本1.1.1及以上)

說明

您可通過如下語句查看PolarDB PostgreSQL版的內核小版本的版本號:

  • PostgreSQL 14

    select version();
  • PostgreSQL 11

    show polar_version;

背景信息

PolarDB PostgreSQL版的內存可以分為Shared Buffer Pool、Dynamic Shared Memory Areas以及進程私有內存三部分:

  • Shared Buffer Pool:集群啟動時采用預分配的方式建立的一大段共享內存,通過確定offset來對各個功能模塊劃分使用區間。

  • Dynamic Shared Memory Areas:進程間動態共享內存區。PostgreSQL為實現進程間并行計算設計的共享內存區,可以動態擴展。

  • Process Global Area:進程工作使用的內存區。包含以下兩部分。

    • Memory Context。

    • 邏輯直接控制的內存。

內存劃分如圖所示:內存劃分

其中,Shared Buffer Pools在PolarDB PostgreSQL版中使用的內存最多,且對性能有直接影響。原PostgreSQL在集群重啟或者意外退出時,都會對Shared Buffer Pools進行清理和重新初始化。在集群重啟進入到故障恢復狀態時,會根據WAL日志進行數據頁面的修改,需要重新加載數據甚至修改數據,影響集群可用時間。其次,Shared Buffer Pools的重新初始化將會導致重新加載數據業務需要的數據,會帶來嚴重的性能抖動。

為了解決以上問題,PolarDB PostgreSQL版增加了Persisted Buffer Pool(PBP)的特性,能夠在集群異常退出或者重新啟動時,仍然可以使用集群退出前的Shared Buffer Pool。優勢如下:

  • 減少故障恢復時間,提升系統可用性。

  • 集群退出前后,性能沒有明顯抖動。

原理介紹

PolarDB PostgreSQL版將Shared Buffer Pool的部分內存變為Pod級生命周期的Persisted Buffer Pool。根據對性能的影響性,PolarDB PostgreSQL版主要將Buffer Pool和Buffer Descriptor兩部分放入了PBP中,其他依舊是Instance級生命周期的內存。

  • Pod級生命周期:PolarDB PostgreSQL版是部署在K8s上的,Pod級生命周期的共享內存不會隨著集群的退出而銷毀。

  • Instance級生命周期:在集群退出或者異常退出重啟后進行清理的集群級共享內存。

內存劃分如圖所示:原理

影響PBP可用性的指標

集群退出前的PBP不是所有場景都適用。在集群啟動時,如果出現以下情況,則無法使用PBP。

  • 集群的規格改變,需要使用不同大小的Buffer Pool。

  • 當前PBP并非此集群所建立。

  • 當前PBP中的控制信息失效。

除了PBP的整體可用性需要檢查外,每個PBP的頁都需要做可用性檢測。如果出現以下情況,則無法使用當前頁。

  • 當前頁存在未提交的事務。

  • 當前頁的Descriptor信息無效。

  • 當前頁存在無效的LSN。

  • 當前頁的屬性為錯誤或者無效。

影響PBP可用性的指標如圖所示:可用性指標

PBP的效果

Persisted Buffer Pool在數據庫重啟后,依然能夠使用集群退出前的Buffer Pool。因此,無論在恢復場景還是業務場景,都能夠快速使用緩存數據,提升性能。如圖所示:PBP效果

  • 恢復性能對比。

    模擬異常退出時的場景,回放日志總大小為2093 MB情況如下:

    參數

    日志回放耗時

    故障恢復耗時

    未使用PBP

    598s

    746s

    使用PBP

    68s

    294s

    耗時對比如圖所示:性能對比

  • 性能前后對比。

    并不是Buffer Pool中所有的頁都是可以復用的。例如:在重啟前,某進程對頁上X鎖,隨后系統宕機了,該X鎖就沒有進程來釋放了。因此,在宕機和重啟之后需要把Buffer Pool的所有頁遍歷一遍,剔除掉不能被復用的頁。另外,Buffer Pool的回收依賴于K8s。使用該優化之后,可以使重啟前后的性能更加平穩。重啟前后性能對比如圖所示:重啟前后性能對比

使用指南

打開如下參數即可使用。

polar_enable_persisted_buffer_pool = ON
說明

參數的啟用或者關閉需要重啟集群。