Analizler#1189
Demo modu

Analiz #1189

Bitti

Hedef: sorgu 0x6C906FE3084F4D2D · DB-11 · dönem 2026-10-03 → 2026-10-09

Çalıştırma

Model
gemma4:12b (gemma4)Kurum içi
Prompt şablonu
#16
Token (giriş / çıkış)
20.004 / 1.725
Süre
145,0 sn
Onarım
1
Kural bulgusu
2
Getirim (bağlama giren)
KB 2 · profil 5 · vaka 0

Özet

güven: Orta

Sorgunun yavaşlığına neden olan temel sorunlar, eksik bir indeks nedeniyle oluşan geçici indeks oluşturma (Index Spool) ve her dış satır için tekrar edilen maliyetli alt sorgu işlemleridir.

Kök nedenler

  • QUERY_STORE_PLAN_IN_MEM tablosunda eksik olan (query_id, plan_id) indekslemesi nedeniyle optimizer her çalışma sırasında bu bilgileri içeren geçici bir indeks inşa etmektedir (Eager Index Spool). F1
  • Alt sorgu (subquery) kullanımı nedeniyle, dış sorgudaki her bir satır için QUERY_STORE_RUNTIME_STATS_IN_MEM ve QUERY_STORE_RUNTIME_STATS_V2_IN_MEM gibi tabloları içeren maliyetli alt ağaçlar tekrar tekrar çalıştırılmaktadır. F2

Bulgular

2 bulgu
IdCiddiyetKuralBaşlıkKanıt
F1yüksek INDEX_SPOOLGeçici index (Eager Index Spool) — kalıcı index eksikOptimizer QUERY_STORE_PLAN_IN_MEM için sorgu sırasında geçici index kuruyor (her çalıştırmada yeniden; maliyet payı %100): NodeId 15: anahtar [query_id, plan_id], 54.469 kez aranıyor, 1.000 satır okunup kuruluyor. Kalıcı index adayı: QUERY_STORE_PLAN_IN_MEM (query_id, plan_id); mevcut index'lerle örtüşme kontrol edilmeli.
F2yüksek REPEATED_SUBTREEDış satır başına tekrar çalışan pahalı alt ağaçNodeId 18 Row Count Spool alt ağacı 194.561 kez çalışıyor (dış tarafın her satırı için), maliyet payı %100; tablolar: QUERY_STORE_RUNTIME_STATS_IN_MEM, QUERY_STORE_RUNTIME_STATS_V2_IN_MEM, sys.plan_persist_runtime_stats, sys.plan_persist_runtime_stats_v2; en pahalı iç operatör Table-valued function (NodeId 25, %14,3). SELECT listesindeki ilişkili alt sorguysa JOIN/OUTER APPLY'a çevirmek ya da çalıştığı satır sayısını azaltmak değerlendirilmeli.

Plan özeti

Plan özeti
Plan tipi: tahmini; statement sayısı 1; toplam maliyet 1,271; tahmini satır 54.469
CE sürümü: 170; DOP: ?; paralel değil: MaxDOPSetToOne
Memory grant (KB): istenen 672 (tahmini plan; verilen/kullanılan yalnız actual planda)
Operatörler (maliyet sırasıyla):

Benzer vakalar

LLM bağlamına girdi; örnektir, kanıt değildir

Bağlama benzer vaka girmedi.

Analizi güçlendirecek ek bilgiler

isteğe bağlı; verilirse yeniden analiz edin
  • Plan tahmini (estimated): actual plan verilirse gerçek satır ve çalışma sayılarıyla tahmin hataları doğrulanır; kurallar şu an optimizer tahminlerine dayanıyor.
  • Sorgu parametreli ve değerleri bilinmiyor: yavaş çalışmanın parametre değerleri (ya da değerleri içeren actual plan) kardinalite tahmin hatasını ve parametre hassasiyetini açıklar.

Öneriler

İngilizce çeviri onay bekliyor

Korpusa ve LLM bağlamına bu analizin İngilizce çevirisi girer; onaylanmadan vaka korpusa girmez.

Bu analiz korpusta değil: onaylanmış ya da uygulanmış öneri yok

Korpusa yalnız onaylanmış ya da uygulanıp sahada izi görülen çözüm girer; aynı sorgunun yalnız en son onaylanan analizi korpusta kalır.

Korpusa girerse yaklaşık 61 sorgunun benzer vaka listesine girebilir.

Yeni index: QUERY_STORE_PLAN_IN_MEM (query_id, plan_id)

doğrulanmadı karar bekliyor
Tablo metadata'da yok: QUERY_STORE_PLAN_IN_MEM (harici sorgu ya da farklı DB); kolonlar, tipler ve mevcut index'ler doğrulanamadı, script üretilmedi.

Uygulanabilir script yok: öneriyi onaylayın ya da gerekçeyle reddedin (karar vaka hafızasına girer); "Uygulandı" kaydı tutulmaz.

T-SQL refactor — model önerisi

uyarılı karar bekliyor
OrijinalÖneri
SELECT 1, N'DB-11', p.plan_id, p.query_id, p.query_plan_hash, p.is_forced_plan, p.compatibility_level, SELECT 1, N'DB-11', p.plan_id, p.query_id, p.query_plan_hash, p.is_forced_plan, p.compatibility_level,
CONVERT(datetime, SWITCHOFFSET(p.last_compile_start_time, 0)), CONVERT(datetime, SWITCHOFFSET(p.last_execution_time, 0)), CONVERT(datetime, SWITCHOFFSET(p.last_compile_start_time, 0)), CONVERT(datetime, SWITCHOFFSET(p.last_execution_time, 0)),
p.force_failure_count, p.last_force_failure_reason_desc p.force_failure_count, p.last_force_failure_reason_desc
FROM sys.query_store_plan AS p FROM sys.query_store_plan AS p
WHERE p.is_forced_plan = 1 WHERE p.is_forced_plan = 1
OR p.query_id IN (SELECT pp.query_id FROM sys.query_store_plan AS pp OR p.query_id IN (SELECT sub.query_id FROM (SELECT pp.query_id FROM sys.query_store_plan AS pp
JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id = pp.plan_id JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id = pp.plan_id
WHERE rs.runtime_stats_interval_id > @Arg1 AND rs.runtime_stats_interval_id <= @Arg2) WHERE rs.runtime_stats_interval_id > @Arg1 AND rs.runtime_stats_interval_id <= @Arg2
GROUP BY pp.query_id) AS sub)
Script
SELECT 1, N'DB-11', p.plan_id, p.query_id, p.query_plan_hash, p.is_forced_plan, p.compatibility_level,
               CONVERT(datetime, SWITCHOFFSET(p.last_compile_start_time, 0)), CONVERT(datetime, SWITCHOFFSET(p.last_execution_time, 0)),
               p.force_failure_count, p.last_force_failure_reason_desc
        FROM sys.query_store_plan AS p
        WHERE p.is_forced_plan = 1
           OR p.query_id IN (SELECT sub.query_id FROM (SELECT pp.query_id FROM sys.query_store_plan AS pp 
                             JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id = pp.plan_id 
                             WHERE rs.runtime_stats_interval_id > @Arg1 AND rs.runtime_stats_interval_id <= @Arg2
                             GROUP BY pp.query_id) AS sub)

Asistana sor

yalnız bu analizin kanıtıyla

Bu analiz hakkında soru sorun: cevap yalnız bulgulara (F), önerilere (R), sorgu, plan ve metadata'ya dayanır; kanıt gösteremeyen cevap gösterilmez.