Postgresql

存檔失敗,但從未生成新的 WAL

  • August 18, 2022

目前我遇到了一個奇怪的情況。存檔failed_count從 0 飆升至 2475。

這是我檢查的一些參數:

  1. 從 pg_stat_archiver 中選擇 *;

archived_count3567; last_archived_time2022-08-17 21:36:05; failed_count2516; last_failed_time2022-08-18 10:58

  1. select pg_switch_wal(); WAL 總是在切換,非常 1-2 秒。
  2. 從 pg_stat_replication 中選擇 pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn);

這也每秒鐘都在變化。總是在一段時間內從數千旋轉到 0。

  1. SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';

從今天早上 12 點開始,這個值一直是 7450。在此之前,它一直在增加。觀察到的最大值是 10811

  1. SELECT * FROM pg_stat_bgwriter ; 這給出了:

名稱 |價值 | ———————+—————————- -+ checkpoints_timed |109040 –> 增加 |

checkpoints_req |96 –> 保持不變 |

checkpoint_write_time|125144712​​88 | 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 日誌中的錯誤消息應該為您提供有關原因的線索。

引用自:https://dba.stackexchange.com/questions/315760