Postgresql
Postgres 9.3 中主/從之間的高延遲延遲
我有一個具有以下配置的 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 倍。
為什麼?
在其他流量很大的伺服器中,延遲很小。
在其他流量很大的伺服器中,延遲很小。
通過這個陳述,我假設這個伺服器沒有很多流量。
如果沒有交易可以重播,那麼 的價值
pg_last_xact_replay_timestamp()
不會僅僅因為時間的流逝而增加。此外,archive_timeout
只有在有要歸檔的內容時才會啟動。如果自上次歸檔切換後沒有新的 WAL 數據,那麼現有的 WAL 文件(除了初始頭之外是空的)將不會因為 5 分鐘過去而被歸檔。一種可能的解決方法是將 checkpoint_timeout 也設置為 300 秒。在 9.3 中使用此設置,檢查點將創建要歸檔的記錄,歸檔將創建要檢查點的工作,因此您將在空閒伺服器上每 5 分鐘生成一個幾乎空的文件。大多數人認為這是一個錯誤,但也許它是您的一個功能。