DBAtlas · Atlas de operaciones de bases de datos

Monitorear el lag de recepción y replay de WAL en el standby (pg_stat_wal_receiver)

PostgreSQLReplicación

Comando

-- 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;

Qué hace

Muestra cuánto WAL ha recibido el standby y cuánto ha aplicado (atraso de replay), la antigüedad de la última transacción reproducida, si el replay está en pausa y el estado de la conexión del walreceiver (qué primario, slot, timeline, hora del último mensaje).

Cuándo usarlo

Para diagnosticar el lag cuando el primario no es accesible o en standbys en cascada; ante una alerta de 'standby retrasado', para separar un problema de red (recepción) de uno de replay (I/O, conflictos).

Precaución

Si pg_stat_wal_receiver no devuelve filas, el standby no está haciendo streaming (se alimenta del archivo o está desconectado). last_replay_age crece incluso cuando el primario no tiene escrituras; interprételo junto con la diferencia receive_lsn/replay_lsn. Si el atraso de replay crece mientras la recepción avanza, el standby tiene consultas largas (max_standby_streaming_delay) o un cuello de botella de I/O.

Abrir en DBAtlas →

Relacionado