DBAtlas · Veritabanı operasyon atlası

JIT derlemenin sorgu süresine etkisini ölç

PostgreSQLPerformans

Komut

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

DBAtlas'ta aç →

İlgili