Postgresql
了解 pg_wal 和歸檔
所以我繼承了這個數據庫。一開始,
pg_wal
.然後,幾週後,我計算了一下
SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
,結果是:8182個文件。查看目錄上文件的時間戳
pg_wal
,我看到正在創建一些新文件,但文件數量保持不變。我懷疑發生了輪換。然後我觀察
pg_stat_archiver
:archived_count = **2**; failed_count = 0
大約 3 小時後,我再次數數
SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
結果:8183。顯然會創建一個新文件。然後我做
pg_stat_archiver
:archived_count = **3**; failed_count = 0
archived_count last_archived_wal last_archived_time failed_count last_failed_wal last_failed_time 3 000000010000009B00000083 22-09-13 13:14:20. 0 stats_reset 2022-09-13 08:14:19
這個數據庫很低,一點也不忙。有時沒有人訪問它。但是有邏輯複製,每天一次將大約 300 條記錄同步到另一台伺服器。
這是我的設置:
max_wal_size : 1024 Mb min_wal_size : 2048 Mb wal_keep_segment : 0 wal_rotation : ON wal_level : logical wal_compression : ON archive_on : ON archive_mode : test ! -f /Archive/%f && cp %p /Archive/%f archive_timeout : 900
問題 :
- 為什麼第二個計數
pg_wal
增加?我預計它會減少,因為存檔數量會增加。- 如果
wal_keep_segment = 0
,為什麼 WAL 的數量pg_wal
從不為 0?在文件中,它說:如果 wal_keep_segments 為零(預設值),系統不會為備用目的保留任何額外的段,
- 為什麼在低谷期間 WAL 的最小數量不=
min_wal_size
+wal_keep_segment
?請賜教。
太感謝了
首先,
CHECKPOINT
在主節點上執行 a 並查看是否刪除了一些 WAL 段(檢查點無論如何都會定期發生)。可能,這不會擺脫 WAL 段。然後,檢查 PostgreSQL 保留 WAL 的已知原因:
wal_keep_size
(或wal_keep_segments
舊版本):您已經檢查過- 存檔問題(查看
pg_stat_archiver
):您也已經這樣做了- 過時的複制槽:
SELECT slot_name, slot_type, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;
查找插槽在哪裡
active
並且FALSE
LSN 是舊的。