JIT derlemenin sorgu süresine etkisini ölç
PostgreSQLPerformansKomut
-- JIT süresinin toplam çalışma süresi içindeki payı (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;
-- Tek sorguda karşılaştır: çıktının sonundaki "JIT:" bölümüne ve Execution Time'a bak
SET jit = on;
EXPLAIN (ANALYZE) SELECT il, sum(bakiye) FROM musteri GROUP BY il;
SET jit = off;
EXPLAIN (ANALYZE) SELECT il, sum(bakiye) FROM musteri GROUP BY il;
RESET jit;Ne yapar?
JIT derleme süresinin (generation, inlining, optimization, emission) sorgu süresi içindeki payını sorgu bazında gösterir; aynı sorguyu JIT açık ve kapalı çalıştırarak net etkiyi ölçer.
Ne zaman kullanılır?
Kısa süren OLTP veya raporlama sorgularında açıklanamayan onlarca/yüzlerce ms gecikme varsa; özellikle çok partition'lı tablolarda maliyet tahmini şişip JIT'i tetiklediğinde.
Dikkat
JIT yalnızca plan maliyeti jit_above_cost'u (varsayılan 100000) aşınca devreye girer; maliyet tahmini abartılıysa kısa sorgularda derleme süresi çalışma süresini geçebilir. Global kapatmak yerine önce sorunlu rol/veritabanı için ALTER ROLE ... SET jit = off ya da jit_above_cost'u yükseltmeyi değerlendir. EXPLAIN (ANALYZE, COSTS OFF) JIT bölümünü göstermez. PostgreSQL LLVM desteğiyle derlenmemişse JIT hiç kullanılmaz; kontrol: SELECT pg_jit_available();
İlgili
- En pahalı sorguları bul (pg_stat_statements: toplam ve ortalama süre)
- Disk I/O, temp dosya ve WAL üreten sorguları bul (pg_stat_statements)
- pg_stat_statements istatistiklerini sıfırla (tümü veya tek sorgu)
- auto_explain ile yavaş sorguların execution plan'ını logla
- EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL) ile planı derinlemesine oku
- Plan regresyonunu queryid ile yakala (pg_stat_statements snapshot karşılaştırması)