Postgresql

Postgres 9.3 中主/從之間的高延遲延遲

  • November 15, 2017

我有一個具有以下配置的 Postgres 9.3 數據庫伺服器:

# grep archive_ postgresql.conf
archive_mode = on            # allows archiving to be done
archive_command = 'rsync -a %p postgres@backupserver:9.3/standby/archive/%f'            # command to use to archive a logfile segment                                                                                                                      
archive_timeout = 300            # force a logfile segment switch after this

和另一台處於熱備用模式的伺服器。

我希望 WAL 數據包在滿或 5 分鐘(300 秒)後發送。

如果我在熱備份中執行此查詢:

SELECT CASE
WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0
ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
END

然後我得到一個約 1500 秒的平均值,比配置的 300 秒大約 5 倍。

為什麼?

在其他流量很大的伺服器中,延遲很小。

相關問題: - PostgreSQL 什麼時候會執行 archive_command 來歸檔 wal 文件?

在其他流量很大的伺服器中,延遲很小。

通過這個陳述,我假設這個伺服器沒有很多流量。

如果沒有交易可以重播,那麼 的價值pg_last_xact_replay_timestamp()不會僅僅因為時間的流逝而增加。此外,archive_timeout只有在有要歸檔的內容時才會啟動。如果自上次歸檔切換後沒有新的 WAL 數據,那麼現有的 WAL 文件(除了初始頭之外是空的)將不會因為 5 分鐘過去而被歸檔。

一種可能的解決方法是將 checkpoint_timeout 也設置為 300 秒。在 9.3 中使用此設置,檢查點將創建要歸檔的記錄,歸檔將創建要檢查點的工作,因此您將在空閒伺服器上每 5 分鐘生成一個幾乎空的文件。大多數人認為這是一個錯誤,但也許它是您的一個功能。

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