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

Journaliser les plans d'exécution des requêtes lentes avec auto_explain

PostgreSQLPerformances

Commande

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

Ouvrir dans DBAtlas →

Voir aussi