Journaliser les plans d'exécution des requêtes lentes avec auto_explain
PostgreSQLPerformancesCommande
-- 1) Per session: effective immediately, no restart (superuser)
LOAD 'auto_explain';
SET auto_explain.log_min_duration = '500ms';
SET auto_explain.log_analyze = on;
SET auto_explain.log_buffers = on;
SET auto_explain.log_timing = off;
SET auto_explain.log_nested_statements = on;
-- 2) Persistent: loaded by new sessions, a reload is enough.
-- The module must be LOADed in this session before ALTER SYSTEM accepts auto_explain.* parameters.
LOAD 'auto_explain';
ALTER SYSTEM SET session_preload_libraries = 'auto_explain';
ALTER SYSTEM SET auto_explain.log_min_duration = '2s';
ALTER SYSTEM SET auto_explain.log_analyze = on;
ALTER SYSTEM SET auto_explain.log_buffers = on;
ALTER SYSTEM SET auto_explain.log_timing = off;
ALTER SYSTEM SET auto_explain.sample_rate = 0.1;
SELECT pg_reload_conf();Ce que fait la commande
Écrit dans le journal du serveur le plan d'exécution des requêtes dépassant le seuil (avec le nombre réel de lignes et les données de buffers lorsque log_analyze est actif) ; capture le plan produit avec les vrais paramètres de l'application.
Quand l'utiliser
Lorsqu'une requête n'est lente que depuis l'application ou avec des paramètres précis et ne peut pas être reproduite par un EXPLAIN manuel ; pour attraper des changements de plan intermittents.
Attention
log_analyze = on ajoute une surcharge d'instrumentation à chaque requête échantillonnée, y compris celles sous le seuil ; log_timing = off et sample_rate < 1 la réduisent. log_min_duration = 0 inonde le journal en production. ALTER SYSTEM SET session_preload_libraries écrase la valeur existante ; vérifiez d'abord SHOW session_preload_libraries. session_preload_libraries n'affecte pas les sessions existantes ; le charger dans chaque processus exige shared_preload_libraries plus un redémarrage.
Voir aussi
- Trouver les requêtes les plus coûteuses (pg_stat_statements : temps total et moyen)
- Trouver les requêtes à l'origine des E/S disque, fichiers temporaires et WAL (pg_stat_statements)
- Réinitialiser les statistiques pg_stat_statements (toutes ou une seule requête)
- Lire un plan en profondeur avec EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Détecter les régressions de plan par queryid (comparaison de snapshots pg_stat_statements)
- Vérifier la capacité de requêtes parallèles et l'utilisation actuelle des workers