Мониторинг задержки получения и воспроизведения WAL на standby (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 standby получил и сколько применил (отставание воспроизведения), возраст последней воспроизведённой транзакции, приостановлено ли воспроизведение и состояние подключения walreceiver (к какому primary, слот, timeline, время последнего сообщения).
Когда использовать
Для диагностики задержки, когда primary недоступен, или на каскадных standby; при алерте 'standby behind' — чтобы отделить сетевую проблему (receive) от проблемы воспроизведения (I/O, конфликт).
Внимание
Если pg_stat_wal_receiver не возвращает строк, standby не использует потоковую репликацию (получает данные из архива или отключён). last_replay_age растёт, даже когда на primary нет записи; интерпретируйте его вместе с разницей receive_lsn/replay_lsn. Если отставание воспроизведения растёт, а получение продвигается, на standby есть долгие запросы (max_standby_streaming_delay) или узкое место I/O.