Leer un plan en profundidad con EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
PostgreSQLRendimientoComando
-- 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.
Relacionado
- Encontrar las consultas más costosas (pg_stat_statements: tiempo total y medio)
- Encontrar las consultas que generan I/O de disco, archivos temporales y WAL (pg_stat_statements)
- Restablecer las estadísticas de pg_stat_statements (todas o una sola consulta)
- Registrar los planes de ejecución de las consultas lentas con auto_explain
- Detectar regresiones de plan por queryid (comparación de snapshots de pg_stat_statements)
- Comprobar la capacidad de consultas paralelas y el uso actual de workers