DBAtlas · Atlas d'exploitation des bases de données

Surveiller le retard de réception et de replay du WAL sur la standby (pg_stat_wal_receiver)

PostgreSQLRéplication

Commande

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

Ce que fait la commande

Indique quelle quantité de WAL la standby a reçue et appliquée (arriéré de replay), l'âge de la dernière transaction rejouée, si le replay est en pause, et l'état de la connexion walreceiver (quelle primaire, slot, timeline, heure du dernier message).

Quand l'utiliser

Pour diagnostiquer un retard lorsque la primaire est injoignable ou sur des standbys en cascade ; sur une alerte 'standby en retard', pour distinguer un problème réseau (réception) d'un problème de replay (E/S, conflit).

Attention

Si pg_stat_wal_receiver ne renvoie aucune ligne, la standby n'est pas en streaming (alimentée depuis l'archive ou déconnectée). last_replay_age augmente même lorsque la primaire n'a pas d'écritures ; interprétez-le avec l'écart receive_lsn/replay_lsn. Si l'arriéré de replay augmente alors que la réception avance, la standby a des requêtes longues (max_standby_streaming_delay) ou un goulet d'E/S.

Ouvrir dans DBAtlas →

Voir aussi