存檔失敗,但從未生成新的 WAL
目前我遇到了一個奇怪的情況。存檔
failed_count
從 0 飆升至 2475。這是我檢查的一些參數:
- 從 pg_stat_archiver 中選擇 *;
archived_count
3567;last_archived_time
2022-08-17 21:36:05;failed_count
2516;last_failed_time
2022-08-18 10:58
select pg_switch_wal();
WAL 總是在切換,非常 1-2 秒。- 從 pg_stat_replication 中選擇 pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn);
這也每秒鐘都在變化。總是在一段時間內從數千旋轉到 0。
SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
從今天早上 12 點開始,這個值一直是 7450。在此之前,它一直在增加。觀察到的最大值是 10811
SELECT * FROM pg_stat_bgwriter ;
這給出了:名稱 |價值 | ———————+—————————- -+ checkpoints_timed |109040 –> 增加 |
checkpoints_req |96 –> 保持不變 |
checkpoint_write_time|12514471288 | checkpoint_sync_time |1373072.0 | 緩衝區檢查點 |412734838 | buffers_clean |20745183 | maxwritten_clean |121362 | buffers_backend |98238043 | buffers_backend_fsync|0 | 緩衝區分配 |904724994 | stats_reset |2021-08-04 12:19:41.333 +0700|
看著
pg_stat_bgwriter
, checkpoints_timed 正在增加,這很好。這發生在我的生產伺服器上(另一個是測試伺服器)。
- 這是怎麼回事 ?為什麼 WAL 停止生成但存檔計數失敗?我的印像是,如果沒有新的 WAL,則不應進行歸檔。
- 我應該打開什麼 LOGGING 參數來監控這些錯誤?
我的配置:
name |setting |unit| ----------------------------+------------------------------------------+----+ archive_command |test ! -f /archive/%f && cp %p /archive/%f| | archive_mode |on | | archive_timeout |2400 |s | checkpoint_completion_target|0.9 | | checkpoint_flush_after |32 |8kB | checkpoint_timeout |300 |s | checkpoint_warning |30 |s | hot_standby |on | | log_checkpoints |off | | max_replication_slots |10 | | max_wal_senders |5 | | max_wal_size |8192 |MB | min_wal_size |2048 |MB | synchronous_commit |off | | synchronous_standby_names |* | | wal_compression |off | | wal_keep_segments |4000 | | wal_level |logical | | wal_log_hints |off | | wal_segment_size |16777216 |B | wal_sender_timeout |60000 |ms |
請幫忙。謝謝
PostgreSQL 不斷嘗試一次又一次地歸檔相同的 WAL 段。這就是為什麼失敗次數不斷增加的原因,即使沒有生成新的 WAL。
修復問題 - PostgreSQL 日誌中的錯誤消息應該為您提供有關原因的線索。