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

Lire un plan en profondeur avec EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)

PostgreSQLPerformances

Commande

-- ANALYZE really executes the statement: run DML inside a transaction and roll it back
BEGIN;
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE)
UPDATE customer SET balance = balance + 1 WHERE city = 'Ankara';
ROLLBACK;

-- For SELECT
EXPLAIN (ANALYZE, BUFFERS, SETTINGS)
SELECT name FROM customer ORDER BY name DESC LIMIT 10 OFFSET 1000;

Ce que fait la commande

Renvoie le plan avec les statistiques d'exécution réelles : BUFFERS affiche par nœud les blocs shared hit/read/dirtied et temp, SETTINGS affiche les paramètres non par défaut qui influent sur la planification, WAL affiche les enregistrements/octets de WAL générés.

Quand l'utiliser

Pour analyser l'écart entre lignes estimées et réelles, les tris/hachages débordant sur disque (Sort Method: external merge, temp read/written) et le coût WAL des DML.

Attention

ANALYZE exécute réellement l'instruction ; exécutez toujours les DML dans BEGIN/ROLLBACK (les triggers et incréments de séquences ont quand même lieu). Conseils de lecture : un écart de 10x ou plus entre 'rows' estimé et 'actual rows' indique un problème de statistiques ; pour les nœuds dans des boucles, temps et lignes sont par itération, multipliez par loops pour le total ; un 'Heap Fetches' élevé sur un Index Only Scan signifie que la visibility map est périmée, et 'Workers Planned' > 'Workers Launched' signifie que le pool de workers est épuisé. Utilisez TIMING OFF lorsque la surcharge de chronométrage est élevée ; COSTS OFF masque aussi la section JIT.

Ouvrir dans DBAtlas →

Voir aussi