DBAtlas · Atlas de operaciones de bases de datos

Leer un plan en profundidad con EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)

PostgreSQLRendimiento

Comando

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

Qué hace

Devuelve el plan con estadísticas reales de ejecución: BUFFERS muestra los bloques shared hit/read/dirtied y temp por nodo, SETTINGS muestra los parámetros no predeterminados que afectan a la planificación, WAL muestra los registros/bytes de WAL generados.

Cuándo usarlo

Para analizar la diferencia entre filas estimadas y reales, los sorts/hashes que se vuelcan a disco (Sort Method: external merge, temp read/written) y el costo en WAL del DML.

Precaución

ANALYZE ejecuta realmente la sentencia; ejecute siempre el DML dentro de BEGIN/ROLLBACK (los triggers y los incrementos de secuencias siguen ocurriendo). Consejos de lectura: una diferencia de 10x o más entre 'rows' estimadas y 'actual rows' apunta a un problema de estadísticas; en los nodos dentro de bucles, el tiempo y las filas son por iteración, multiplique por loops para obtener el total; muchos 'Heap Fetches' en un Index Only Scan significan que el visibility map está desactualizado, y 'Workers Planned' > 'Workers Launched' significa que el pool de workers está agotado. Use TIMING OFF donde la sobrecarga de temporización sea alta; COSTS OFF también oculta la sección JIT.

Abrir en DBAtlas →

Relacionado