スタンバイでWALの受信遅延と再生遅延を監視(pg_stat_wal_receiver)
PostgreSQLレプリケーションコマンド
-- Run on the standby:
SELECT pg_is_in_recovery() AS in_recovery,
pg_last_wal_receive_lsn() AS receive_lsn,
pg_last_wal_replay_lsn() AS replay_lsn,
pg_size_pretty(pg_wal_lsn_diff(pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn())) AS replay_backlog,
now() - pg_last_xact_replay_timestamp() AS last_replay_age,
pg_get_wal_replay_pause_state() AS pause_state;
SELECT pid, status, sender_host, sender_port, slot_name, received_tli, flushed_lsn, latest_end_lsn, now() - last_msg_receipt_time AS since_last_msg FROM pg_stat_wal_receiver;概要
スタンバイが受信したWAL量と適用したWAL量(再生バックログ)、最後に再生されたトランザクションの経過時間、再生が一時停止しているか、walreceiverの接続状態(どのプライマリ、スロット、タイムライン、最終メッセージ時刻)を表示する。
使用する場面
プライマリに到達できない場合やカスケードスタンバイでの遅延診断に。「スタンバイ遅延」アラート時に、ネットワーク(受信)の問題と再生(I/O、競合)の問題を切り分けるため。
注意
pg_stat_wal_receiverが行を返さない場合、スタンバイはストリーミングしていない(アーカイブから供給されているか切断されている)。last_replay_ageはプライマリで書き込みがなくても増加するため、receive_lsn/replay_lsnの差と併せて解釈する。受信が進む一方で再生バックログが増える場合、スタンバイに長時間のクエリ(max_standby_streaming_delay)があるか、I/Oのボトルネックがある。