Web API ve e-ticaret sitelerinde mikrosaniyelik CRUD sorgularinin JIT yuzunden 10 kat daha yavas calismasini engelleyin. LLVM derleme cezasini (compilation tax), CPU doygunluk riskini ve postgresql.conf jit_above_cost esiklerini hesaplayin.
Workload tipine gore optimize edilmis JIT esikleri.
# /etc/postgresql/16/main/postgresql.conf # 2026 PostgreSQL JIT (LLVM) Optimizasyon Profili (PURE_OLTP) # JIT Genel Durumu jit = off # JIT'in tetiklenecegi minimum planlama maliyeti (Varsayilan: 100000) jit_above_cost = 1000000 # Fonksiyon inlining icin gereken maliyet esigi (Varsayilan: 500000) jit_inline_above_cost = 2000000 # LLVM pahali optimizasyon gecisleri icin maliyet esigi (Varsayilan: 500000) jit_optimize_above_cost = 2000000 # Karmasik ifadeler ve tuple deforming jit_expressions = on jit_tuple_deforming = on
Web API oturumlarinda JIT cezasini engelleyen SQL kurallari.
-- Web uygulamasi / API baglanti havuzunda (PgBouncer, Prisma, Drizzle) -- OLTP sorgularinda JIT derleme cezasini onlemek icin oturum bazli kapatin: SET LOCAL jit = off; -- Veya yalnizca belirli bir raporlama fonksiyonunda JIT'i zorunlu kilin: ALTER FUNCTION generate_monthly_report() SET jit = on; ALTER FUNCTION generate_monthly_report() SET jit_above_cost = 20000;
Sorgunun JIT'e girip girmedigini tespit eden plan ornegi.
EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT customer_id, sum(total_amount) FROM orders WHERE created_at >= '2026-01-01' GROUP BY customer_id; -- Olası JIT Cikti Bloğu (EXPLAIN ANALYZE): -- JIT: -- Functions: 8 -- Options: Inlining true, Optimization true, Expressions true, Deforming true -- Timing: Generation 4.120 ms, Inlining 12.450 ms, Optimization 21.800 ms, Emission 3.200 ms, Total 41.570 ms -- Execution Time: 58.420 ms (Toplam 41.57 ms sadece JIT derlemesinde harcandi!)
PostgreSQL 11 ile tanitilan ve PostgreSQL 14'ten itibaren varsayilan olarak acik (jit = on) gelen LLVM Just-In-Time (JIT) Derleyicisi, veritabani motorunun SQL ifadelerini (WHERE kosullari, matematiksel hesaplamalar) ve satirlarin sutunlara ayrilmasini (tuple deforming) dogrudan makine koduna (x86-64 native assembly) donusturmesini saglar.
Eger sorgunuz milyonlarca satirlik bir tabloyu tariyor, buyuk gruplamalar (GROUP BY) ve karmasik filtreler calistiriyorsa; yorumlayicinin sanal makine donguleri yerine native kod calistirmasi%20 ila %35 saf calisma hizi artisi saglar. 5 saniye suren bir sorgu 3.5 saniyeye duser; bu senaryoda harcanan 30 milisaniyelik LLVM derleme suresi onemsiz bir detaydir.
Ancak web siteleri, REST API'ler ve e-ticaret CRUD islemleri tamamen kucuk ve hizli sorgulara dayanir. Normalde 2-3 milisaniye suren bir sorgu, PostgreSQL planlayicisinin maliyeti yuksek tahmin etmesi yuzunden JIT'e girdiginde; LLVM derleyicisi kod uretmek ve optimize etmek icin 20 ila 45 milisaniyeharcar! Sorgu 2 ms yerine 42 ms'de tamamlanir ve saniyede yuzlerce boyle istek geldiginde sunucunun tum CPU cekirdekleri LLVM derleme surecleriyle kilitlenir.
PostgreSQL, her sorgu icin bir tahmini calisma maliyeti (cost) hesaplar.jit_above_cost (Varsayilan 100.000) degeri asildiginda JIT tetiklenir.jit_inline_above_cost ve jit_optimize_above_cost(Varsayilan 500.000) asildiginda ise LLVM en agir optimizasyon gecislerini (mem2reg, sroa) isletir. OLTP sistemlerinde bu esiklerin 500.000 veya 1.000.000 seviyesine cekilmesi ya da dogrudan kapatilmasi tavsiye edilir.
Bir sorgunun JIT kurbanı olup olmadigini anlamak icin EXPLAIN (ANALYZE, BUFFERS)calistirilmalidir. Ciktinin en altinda JIT: Generation, Inlining, Optimization, Emission sureleri gorunur. Eger toplam calisma suresinin (Execution Time) buyuk bolumu JIT Timing tarafindan tuketilmisse, o endpoint icinSET LOCAL jit = off; uygulanmalidir.