</>
Plan du cours — 25/64

Lire un plan avec EXPLAIN et EXPLAIN ANALYZE

Avancé

EXPLAIN montre le plan que le planificateur prévoit ; EXPLAIN ANALYZE exécute la requête et compare les estimations à la réalité : c'est l'outil central du diagnostic.

EXPLAIN (ANALYZE, BUFFERS)
SELECT c.nom, sum(o.total)
FROM   clients c
JOIN   commandes o ON o.client_id = c.id
WHERE  o.cree_le >= now() - interval '30 days'
GROUP  BY c.nom;

Que regarder#

ÉlémentSignification
cost=0.42..8.44Coût estimé : au démarrage .. au total (unité arbitraire)
rows=1000 vs actual ... rows=52000Estimation contre réalité : un grand écart signale des statistiques faussées
Seq ScanLecture complète de la table
Index Scan / Index Only Scan / Bitmap Heap ScanUtilisation d'un index
Nested Loop / Hash Join / Merge JoinAlgorithme de jointure
loops=Nombre d'exécutions du nœud (multipliez le temps par loops)
Buffers: shared hit=… read=…Pages trouvées en cache (hit) ou lues sur disque (read)
Sort Method: external mergeLe tri a débordé sur disque : work_mem trop petit

Piège : EXPLAIN ANALYZE exécute réellement la requête. Pour un UPDATE ou un DELETE, entourez-le d'une transaction annulée : BEGIN; EXPLAIN ANALYZE UPDATE ...; ROLLBACK;.

Astuce : lisez un plan de l'intérieur vers l'extérieur et cherchez le nœud où actual time est le plus grand, ou où l'estimation s'écarte le plus de la réalité. Des outils comme explain.dalibo.com ou explain.depesz.com rendent les plans lisibles.