RDS PostgreSQL支持通過控制臺或API查看和刪除Replication Slot,實現WAL日志管理。
背景
Replication Slot是PostgreSQL數據庫中的一種機制,用于在流復制中保存狀態。使用Replication Slot可以避免在流復制中出現數據丟失或重復復制的問題,提高數據復制的效率和可靠性。
當非活躍的Replication Slot較多而未及時清理時,會導致WAL日志不斷堆積,占用大量存儲空間,甚至可能寫滿磁盤導致實例鎖定,實例鎖定時無法寫入數據,從而影響業務。
RDS PostgreSQL支持通過控制臺或API來刪除非活躍的Replication Slot,減少WAL日志對磁盤空間的占用。
注意事項
Replication Slot狀態為ACTIVE時,不允許刪除該條Slot。
Replication Slot狀態為INACTIVE時,如果不及時處理,可能會導致WAL日志不斷堆積,當WAL日志寫滿磁盤空間時,將會導致實例鎖定,無法寫入數據,從而影響業務。
影響
狀態為INACTIVE的Replication Slot被刪除后,將會造成以下影響:
實例先前因INACTIVE Slot堆積而無法清理的WAL日志將被自動清理。
業務中無法再使用已刪除的Slot。
操作步驟
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側導航欄單擊日志管理。
在WAL日志管理頁簽即可看到所有Replication Slot相關信息。
Replication Slot信息中各參數與PostgreSQL的
pg_replication_slots
表中各字段對應,對應關系及解釋如下:WAL日志管理參數
pg_replication_slots表對應字段
說明
Slot名稱
slot_name
Replication Slot的名稱。
Slot類型
slot_type
Replication Slot的類型,Slot類型包括:
physical
logical
使用插件(plugin)
plugin
RDS PostgreSQL默認支持三種插件:
test_decoding
pgoutput
wal2json
臨時Slot(temporary)
temporary
是否為臨時Slot。臨時Slot是一種特殊類型的Slot,它僅在當前數據庫會話期間存在,并在會話結束時自動刪除。
true:臨時Slot
false:永久Slot
數據庫名稱
database
Replication Slot所處的數據庫。
WAL堆積量
無對應字段。
該參數取值由RDS內核計算所得。
SELECT pg_size_pretty( pg_wal_lsn_diff( pg_current_wal_insert_lsn(), restart_lsn) ) AS wal_delay FROM pg_replication_slots;
Replication Slot造成的WAL日志堆積量,單位為MB。
邏輯訂閱延遲
無對應字段。
該參數取值由RDS內核計算所得。
SELECT *, CAST(extract(epoch FROM replay_lag) AS BIGINT) AS sub_replay_lag FROM pg_stat_replication;
當前Replication Slot對應訂閱端的邏輯訂閱的具體延遲,單位為秒(s)。
是否活躍
active
Replication Slot當前是否被使用。
INACTIVE:不活躍
ACTIVE:活躍
(可選)如果某個Replication Slot的是否活躍列為INACTIVE,則會造成WAL日志不斷堆積,請及時處理,處理方法如下:
在業務中使用此Slot,使其狀態變為ACTIVE。
如果此Slot是冗余的,請單擊操作列的刪除。
相關OpenAPI
查詢實例所有Replication Slot相關信息:DescribeSlots
刪除實例Replication Slot:DeleteSlot