Commence par regarder `pg_stat_replication` sur le primaire. Ça te donnera le `write_lag`, `flush_lag` et `replay_lag`. Le `replay_lag` sur la replica est le plus important.
SELECT application_name, client_addr, state, sync_state, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag FROM pg_stat_replication;
Ensuite, sur la replica, vérifie `pg_stat_wal_receiver`. Le champ `latest_end_lsn` et `latest_end_time` te donnera l'état de réception des WALs.
Si le `replay_lag` est grand mais pas le `write_lag`, c'est que la replica a du mal à appliquer les WALs, souvent un problème d'IO sur la replica ou des requêtes lentes.
Vérifie la bande passante réseau entre la primaire et la replica. Si c'est saturé ou si tu as de la latence, le transfert des WALs sera lent. `iperf3` peut aider à diagnostiquer.
Regarde les `checkpoints` sur la primaire. Si tes `wal_buffers` sont trop petits ou que les `checkpoint_timeout` sont trop agressifs, ça peut créer des pics d'écriture qui submergent la replica.
Ok c'était un problème d'IO sur la replica. Le disque était un peu saturé par un autre process de backup qui tournait en même temps que la charge importante. J'ai décalé le backup et ça va mieux. Merci pour les commandes !
Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
theophile94
Membre depuis le 11/07/2021actif
Ma réplication PostgreSQL est en `lag`. La replica est toujours quelques secondes derrière la primaire. Comment je peux investiguer ça rapidement pour trouver la cause ?