為了有效管理WAL日誌,PolarDB PostgreSQL版支援通過控制台查看邏輯複製槽(Logical Replication Slots)。
背景
當非活躍的邏輯複製槽較多而未及時清理時,將導致WAL日誌不斷堆積,佔用大量儲存空間,甚至可能寫滿磁碟導致叢集鎖定,叢集鎖定時無法寫入資料,從而影響業務。
PolarDB PostgreSQL版支援通過控制台查看邏輯複製槽(Logical Replication Slots),便於查看邏輯複製槽的活躍狀態,然後手動刪除非活躍的邏輯複製槽來清理WAL日誌。
前提條件
對於集中式PolarDB PostgreSQL版叢集(產品版本為企業版或標準版),您可以通過控制台設定wal_level參數為logical,修改該參數後叢集將會重啟,請在修改參數前做好業務安排,謹慎操作。
PolarDB PostgreSQL分布式版叢集的wal_level參數預設為logical,無需關注。
查看邏輯複製槽
登入PolarDB控制台,選擇叢集所在地區,在叢集列表中單擊目的地組群ID進入詳情頁。
在左側導覽列選擇,在WAL日誌管理頁簽可查看邏輯複製槽(Logical Replication Slots)資訊。
WAL日誌管理參數
說明
Slot名稱
邏輯複製槽名稱。
Slot類型
邏輯複製槽的類型,僅支援
logical。使用外掛程式(plugin)
PolarDB PostgreSQL版預設支援以下外掛程式:
decoderbufsdecoder_rawwal2jsonpgoutput
臨時Slot(temporary)
是否為臨時Slot。臨時Slot是一種特殊類型的Slot,它僅在當前資料庫會話期間存在,並在會話結束時自動刪除。
true:臨時Slot。false:永久Slot。
資料庫名稱
邏輯複製槽所處的資料庫。
WAL堆積量
邏輯複製槽造成的WAL日誌堆積量,單位為MB。
邏輯訂閱延遲
當前邏輯複製槽對應訂閱端的邏輯訂閱的具體延遲,單位為秒(s)。
是否活躍
邏輯複製槽當前是否被使用。
INACTIVE:不活躍。
ACTIVE:活躍。
(可選)如果某個邏輯複製槽的是否活躍列為INACTIVE,則會造成WAL日誌不斷堆積,請及時處理,處理方法如下:
在業務中使用此Slot,使其狀態變為ACTIVE。
確認此Slot冗餘時,可使用
SELECT pg_drop_replication_slot('slot_name');刪除。
(可選)建立邏輯複製槽
在發布端資料庫中建立發布。
CREATE PUBLICATION <發布名稱> FOR TABLE <表名>;樣本:
CREATE PUBLICATION pub1 FOR TABLE public.t1;說明您可通過
SELECT * FROM pg_publication;查看當前叢集發布資訊。在訂閱端建立新訂閱。此處發布端和訂閱端是同叢集不同資料庫。
使用高許可權帳號在發布端資料庫中建立邏輯複製槽。
SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');在訂閱端資料庫中,建立與待訂閱的發布端資料庫表具有相同結構和名稱的表。
在訂閱端資料庫中建立邏輯訂閱。
CREATE SUBSCRIPTION my_subscription CONNECTION 'channel_name=localhost dbname=<發布端資料庫名> user=<高許可權帳號> password=<帳號密碼>' PUBLICATION pub1 WITH (create_slot=false,slot_name=<slot_name>);重要發布端資料庫和訂閱端資料庫位於相同的叢集時,必須使用WITH添加訂閱參數
create_slot=false。