Medir el impacto de la compilación JIT en el tiempo de consulta
PostgreSQLRendimientoComando
-- Share of JIT time in total execution time (PG15+)
SELECT queryid,
calls,
jit_functions,
round((jit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time)::numeric, 1) AS jit_ms,
round(total_exec_time::numeric, 1) AS total_ms,
round((100 * (jit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time)
/ NULLIF(total_exec_time, 0))::numeric, 1) AS jit_pct,
left(regexp_replace(query, '\s+', ' ', 'g'), 100) AS query
FROM pg_stat_statements
WHERE jit_functions > 0
ORDER BY jit_pct DESC NULLS LAST
LIMIT 20;
-- Compare on a single query: check the "JIT:" section at the end of the output and Execution Time
SET jit = on;
EXPLAIN (ANALYZE) SELECT city, sum(balance) FROM customer GROUP BY city;
SET jit = off;
EXPLAIN (ANALYZE) SELECT city, sum(balance) FROM customer GROUP BY city;
RESET jit;Qué hace
Muestra, por consulta, la proporción del tiempo de compilación JIT (generation, inlining, optimization, emission) en el tiempo de ejecución; mide el efecto neto ejecutando la misma consulta con JIT activado y desactivado.
Cuándo usarlo
Cuando consultas OLTP o de informes cortas muestran retrasos inexplicables de decenas a cientos de ms; sobre todo en tablas muy particionadas donde estimaciones de costo infladas disparan JIT.
Precaución
JIT solo se activa cuando el costo del plan supera jit_above_cost (100000 por defecto); con estimaciones de costo infladas, la compilación puede tardar más que la ejecución en consultas cortas. En lugar de deshabilitarlo globalmente, considere primero ALTER ROLE ... SET jit = off para el rol/base de datos afectado o subir jit_above_cost. EXPLAIN (ANALYZE, COSTS OFF) no muestra la sección JIT. Si PostgreSQL se compiló sin soporte de LLVM, JIT nunca se usa; compruébelo con SELECT pg_jit_available();
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
- Leer un plan en profundidad con EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Detectar regresiones de plan por queryid (comparación de snapshots de pg_stat_statements)