WAL-Empfangs- und Replay-Verzögerung auf dem Standby überwachen (pg_stat_wal_receiver)
PostgreSQLReplikationBefehl
-- 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;Was es tut
Zeigt, wie viel WAL der Standby empfangen und wie viel er angewendet hat (Replay-Rückstand), das Alter der zuletzt eingespielten Transaktion, ob das Replay pausiert ist, und den Verbindungszustand des walreceiver (welche Primary, Slot, Timeline, Zeit der letzten Nachricht).
Wann einsetzen
Um Verzögerungen zu diagnostizieren, wenn die Primary nicht erreichbar ist, oder auf kaskadierenden Standbys; bei einem Alarm 'Standby im Rückstand', um ein Netzwerkproblem (Empfang) von einem Replay-Problem (I/O, Konflikt) zu unterscheiden.
Vorsicht
Liefert pg_stat_wal_receiver keine Zeilen, streamt der Standby nicht (wird aus dem Archiv gespeist oder ist getrennt). last_replay_age wächst auch, wenn auf der Primary nicht geschrieben wird; zusammen mit der Differenz receive_lsn/replay_lsn interpretieren. Wächst der Replay-Rückstand, während der Empfang voranschreitet, hat der Standby lange Abfragen (max_standby_streaming_delay) oder einen I/O-Engpass.