Medir o impacto da compilação JIT no tempo de consulta
PostgreSQLDesempenhoComando
-- 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;O que faz
Mostra, por consulta, a participação do tempo de compilação JIT (generation, inlining, optimization, emission) no tempo de execução; mede o efeito líquido executando a mesma consulta com JIT ligado e desligado.
Quando usar
Quando consultas OLTP curtas ou de relatório mostram atrasos inexplicáveis de dezenas a centenas de ms; especialmente em tabelas muito particionadas, em que estimativas de custo infladas disparam o JIT.
Atenção
O JIT só entra em ação quando o custo do plano excede jit_above_cost (padrão 100000); com estimativas de custo infladas, a compilação pode demorar mais que a execução em consultas curtas. Em vez de desabilitá-lo globalmente, considere primeiro ALTER ROLE ... SET jit = off para a role/banco afetado ou aumentar o jit_above_cost. EXPLAIN (ANALYZE, COSTS OFF) não imprime a seção de JIT. Se o PostgreSQL foi compilado sem suporte a LLVM, o JIT nunca é usado; verifique com SELECT pg_jit_available();
Relacionados
- Encontrar as consultas mais caras (pg_stat_statements: tempo total e médio)
- Encontrar as consultas que geram I/O de disco, arquivos temporários e WAL (pg_stat_statements)
- Zerar as estatísticas do pg_stat_statements (todas ou de uma única consulta)
- Registrar os planos de execução de consultas lentas com auto_explain
- Ler um plano em profundidade com EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Detectar regressões de plano por queryid (comparação de snapshots do pg_stat_statements)