Superviser une base en production
AvancéLes incidents PostgreSQL se lisent dans quelques vues système : savoir où regarder fait gagner des heures.
Qui fait quoi maintenant ?#
SELECT pid, usename, state, wait_event_type, wait_event,
now() - query_start AS duree, left(query, 80) AS requete
FROM pg_stat_activity
WHERE state <> 'idle' AND pid <> pg_backend_pid()
ORDER BY duree DESC;
SELECT pg_cancel_backend(1234); -- annule la requête en cours (douce)
SELECT pg_terminate_backend(1234); -- ferme la connexion (dure)
Les indicateurs à surveiller#
| Indicateur | Signal d'alerte |
|---|---|
Connexions actives / max_connections | Saturation ; ajoutez un pooleur |
Ratio de cache (blks_hit / (blks_hit + blks_read)) | Bien en dessous de 99 % : shared_buffers ou RAM insuffisants |
Transactions les plus longues, idle in transaction | Blocage du VACUUM, verrous retenus |
| Retard de réplication | Lectures obsolètes, risque de perte à la bascule |
| Lignes mortes / dernière exécution d'autovacuum | Bloat en formation |
| Espace disque et croissance du WAL | Un slot de réplication oublié peut remplir le disque |
Verrous en attente (pg_locks) | Migration ou transaction bloquante |
Outils#
pg_stat_statements: les requêtes coupables.- Prometheus +
postgres_exporter+ Grafana, ou le monitoring de votre fournisseur cloud. pgBadger: analyse des journaux de requêtes lentes.- Alertes sur le retard de réplication, l'espace disque, les connexions et le taux d'erreurs.
Astuce : notez dans un runbook les 5 requêtes de diagnostic ci-dessus. Pendant un incident à 3 h du matin, on ne veut pas les réinventer.