Demo modu

Plan değişimi P406

Orta Kötüleşme 23,8× Bekliyor

DB-11 · query_id 8161 · değişim 29.09.2026 22:00 · plan 7197 → 8706 · Geçiş · Sorgu detayı ve analizleri

Güven gerekçesiOrta: tek aday (WORKLOAD), mekanik değil (plan ile doğrudan bağ kanıtlanmıyor). Zayıf karşı kanıt: HIGH_VARIANCE, METADATA_GAP.

Bu sorgunun diğer plan değişimleri

Önceki kararlar; ters yöndeki değişim aynı planlar arasında geri dönüştür.
#PlanlarYönDurumKararTespit
P407 33296 → 37020 Kötüleşme 5,1× Bekliyor – 9.10.2026 14:51

Sorgu metni

SQL
(@keys nvarchar(4000),@from datetime,@to datetime,@minExec bigint)SELECT k.ServerId, k.DatabaseName, k.Hash, COUNT(*) AS Plans, MAX(x.AvgDuration) / NULLIF(MIN(x.AvgDuration), 0) AS Ratio
FROM OPENJSON(@keys) WITH (ServerId int, DatabaseName sysname, Hash varchar(18)) AS k
CROSS APPLY (
    SELECT p.plan_id, SUM(r.avg_duration * r.count_executions) / NULLIF(SUM(r.count_executions), 0) AS AvgDuration
    FROM perf.QdsQuery AS q
    JOIN perf.QdsPlan AS p ON p.ServerID = q.ServerID AND p.DatabaseName = q.DatabaseName AND p.query_id = q.query_id
    JOIN perf.QdsRuntimeStats AS r ON r.ServerID = p.ServerID AND r.DatabaseName = p.DatabaseName AND r.plan_id = p.plan_id
    WHERE q.ServerID = k.ServerId AND q.DatabaseName = k.DatabaseName AND q.query_hash = CONVERT(binary(8), k.Hash, 1)
      AND r.IntervalStartUtc >= @from AND r.IntervalStartUtc < DATEADD(day, 1, @to)
    GROUP BY p.plan_id
    HAVING SUM(r.count_executions) >= @minExec) AS x
GROUP BY k.ServerId, k.DatabaseName, k.Hash
HAVING COUNT(*) >= 2

1. Etki özeti

MetrikEski plan (7197)Yeni plan (8706)Değişim
Çalışma187834
İptal / hata0 / 00 / 0
Süre ort. (ms)10,6253,4+2284%
Süre maks. (ms)160,74.427,0+2654%
Süre sapma (ms)17,7401,0+2172%
CPU ort. (ms)10,2248,6+2345%
CPU maks. (ms)85,81.336,6+1457%
Mantıksal okuma ort.187,1148.118,5+79076%
Mantıksal okuma maks.1.752,0601.442,0+34229%
Fiziksel okuma15,716,0+2%
Yazma0,00,0
Bellek (KB)5.709,37.148,7+25%
Tempdb (KB)12,3109,6+789%
DOP1,01,00%
Satır ort.1,17,5+601%
Satır maks.6,020,0+233%
Dönem29.09.2026 15:00 → 29.09.2026 22:00 29.09.2026 22:00 → 2.10.2026 21:00

Bekleme kategorileri

ms / çalışma
Bekleme kategorisiEski plan (7197)Yeni plan (8706)
Lock–4,6
Memory0,30,6
CPU–0,4
Other Disk IO–0,0
Buffer IO–0,0
Idle0,5–

2. Zaman çizelgesi

StatsUpdated perf.QdsPlan._WA_Sys_00000007_58671BC9 (2026-09-29 09:02)StatsUpdated perf.QdsRuntimeStats.PK_QdsRuntimeStats (2026-09-29 22:11)StatsUpdated perf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD (2026-09-29 22:11)StatsUpdated perf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD (2026-09-29 22:11)StatsUpdated perf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD (2026-09-29 22:11)StatsUpdated perf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD (2026-09-29 22:11)Değişim: 29.09.2026 22:00Eski plan 29.09.2026 15:00: 6,7 msEski plan 29.09.2026 18:00: 11,2 msEski plan 29.09.2026 19:00: 13,9 msEski plan 29.09.2026 20:00: 8,8 msEski plan 29.09.2026 21:00: 10,5 msYeni plan 29.09.2026 22:00: 19,6 msYeni plan 30.09.2026 00:00: 20,2 msYeni plan 30.09.2026 01:00: 58,3 msYeni plan 30.09.2026 22:00: 39,4 msYeni plan 1.10.2026 19:00: 96,4 msYeni plan 1.10.2026 20:00: 8,4 msYeni plan 1.10.2026 21:00: 116,3 msYeni plan 2.10.2026 17:00: 539,6 msYeni plan 2.10.2026 18:00: 829,3 msYeni plan 2.10.2026 20:00: 914,2 msmax 914,2 ms 09-29 09:02 10-02 20:00
Eski planYeni plan ┆ değişim anı (kesik çizgi)░ olay (bant: zamanı aralık olarak bilinen)

Olaylar

OlayNesneZamanÖnce → sonra Eski plan kullanıyorYeni plan kullanıyor
StatsUpdatedperf.QdsPlan._WA_Sys_00000007_58671BC929.09.2026 09:02 → 1764/1764 hayırhayır
StatsUpdatedperf.QdsRuntimeStats.PK_QdsRuntimeStats29.09.2026 22:11 → 36991/42406 evetevet sıra belirsiz
StatsUpdatedperf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD29.09.2026 22:11 → 36991/42406 evetevet sıra belirsiz
StatsUpdatedperf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD29.09.2026 22:11 → 36991/42406 evetevet sıra belirsiz
StatsUpdatedperf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD29.09.2026 22:11 → 36991/42406 evetevet sıra belirsiz
StatsUpdatedperf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD29.09.2026 22:11 → 36991/42406 evetevet sıra belirsiz

3. Plan karşılaştırması

  • Yalnız eski planda erişim: perf.QdsPlan Index Scan [IX_QdsPlan_Query]; perf.QdsQuery Index Scan [IX_QdsQuery_QueryHash]
  • Yalnız yeni planda erişim: perf.QdsPlan Clustered Index Seek [PK_QdsPlan]; perf.QdsQuery Clustered Index Seek [PK_QdsQuery]
  • Yalnız eski planda join: Hash Match (Inner Join) ×3
  • Yalnız yeni planda join: Hash Match (Inner Join); Nested Loops (Inner Join) ×2
  • Tahmini maliyet: 0.248 → 0.051; tahmini satır: 1 → 1
Eski planın index'leri
perf.QdsRuntimeStats.PK_QdsRuntimeStats, perf.QdsPlan.IX_QdsPlan_Query, perf.QdsQuery.IX_QdsQuery_QueryHash
Yeni planın index'leri
perf.QdsRuntimeStats.PK_QdsRuntimeStats, perf.QdsPlan.PK_QdsPlan, perf.QdsQuery.PK_QdsQuery

4. Neden adayları

ölçüm ve eşikle; kesin değildir
KodÖlçülenEşikSonuçAçıklama
STATS perf.QdsRuntimeStats.PK_QdsRuntimeStats güncellendi 2026-09-29 22:11 (örnekleme %87.2)değişimden önceki 48 saat desteklemiyor İstatistik perf.QdsRuntimeStats.PK_QdsRuntimeStats 2026-09-29 22:11 güncellendi (örnekleme %87.2); planlar bu istatistiği kullanıyor.
STATS perf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD güncellendi 2026-09-29 22:11 (örnekleme %87.2)değişimden önceki 48 saat desteklemiyor İstatistik perf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD 2026-09-29 22:11 güncellendi (örnekleme %87.2); planlar bu istatistiği kullanıyor.
STATS perf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD güncellendi 2026-09-29 22:11 (örnekleme %87.2)değişimden önceki 48 saat desteklemiyor İstatistik perf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD 2026-09-29 22:11 güncellendi (örnekleme %87.2); planlar bu istatistiği kullanıyor.
STATS perf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD güncellendi 2026-09-29 22:11 (örnekleme %87.2)değişimden önceki 48 saat desteklemiyor İstatistik perf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD 2026-09-29 22:11 güncellendi (örnekleme %87.2); planlar bu istatistiği kullanıyor.
STATS perf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD güncellendi 2026-09-29 22:11 (örnekleme %87.2)değişimden önceki 48 saat desteklemiyor İstatistik perf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD 2026-09-29 22:11 güncellendi (örnekleme %87.2); planlar bu istatistiği kullanıyor.
STATS 1 istatistik güncellendi, planlar kullanmıyor desteklemiyor Pencerede güncellenen ama iki planın da kullanmadığı istatistikler aday değil: perf.QdsPlan._WA_Sys_00000007_58671BC9.
WORKLOAD çalışma başına satır 1.07 → 7.5 (7.01×)≥ 2× destekliyor Planlar farklı iş yükü görüyor: çalışma başına satır 1.07 → 7.5. Planlar farklı parametre/parti büyüklüğü için derlenmiş olabilir.
PARAM baskın plan 1 kez el değiştirdi≥ 3 desteklemiyor Planlar dönüşümlü değil: yeni plan eskisinin yerini aldı.

5. Karşı kanıtlar

6. Korpus metni önizlemesi

onaylanınca RAG hafızasına bu metin girer (başlığa onaylayan eklenir)
6. Korpus metni önizlemesi
Plan change case #P406 | DB: DB-11 | Regression | Confidence: Medium (review pending)
Query: (@keys nvarchar(?),@from datetime,@to datetime,@minExec bigint)SELECT k.ServerId, k.DatabaseName, k.Hash, COUNT(*) AS Plans, MAX(x.AvgDuration) / NULLIF(MIN(x.AvgDuration), ?) AS Ratio FROM OPENJSON(@keys) WITH (ServerId int, DatabaseName sysname, Hash varchar(?)) AS k CROSS APPLY ( SELECT p.plan_id, SUM(r.avg_duration * r.count_executions) / NULLIF(SUM(r.count_executions), ?) AS AvgDuration FROM perf.QdsQuery AS q JOIN perf.QdsPlan AS p ON p.ServerID = q.ServerID AND p.DatabaseName = q.DatabaseName AND p.query_id = q.query_id JOIN perf.QdsRuntimeStats AS r ON r.ServerID = p.ServerID AND r.DatabaseName = p.DatabaseName AND r.plan_id = p.plan_id WHERE q.ServerID = k.ServerId AND q.DatabaseName = k.DatabaseName AND q.query_hash = CONVERT(binary(?), k.Hash, ?) AND r.IntervalStartUtc >= @from AND r.IntervalStartUtc < DATEADD(day, ?, @to) GROUP BY p.plan_id HAVING SUM(r.count_executions) >= @minExec) AS x GROUP BY k.ServerId, k.DatabaseName, k.Hash HAVING COUNT(*) >= ?
Change: 2026-09-29 22:00 UTC, plan 7197 → 8706, pattern: Transition
Impact (Query Store, per execution): duration 10.6 → 253.4 ms (+2284%); CPU 10.2 → 248.6 ms (+2345%); reads 187 → 148,119 (+79076%); rows 1.07 → 7.5 (+601%)
Plan difference: Access only in the old plan: perf.QdsPlan Index Scan [IX_QdsPlan_Query]; perf.QdsQuery Index Scan [IX_QdsQuery_QueryHash]; Access only in the new plan: perf.QdsPlan Clustered Index Seek [PK_QdsPlan]; perf.QdsQuery Clustered Index Seek [PK_QdsQuery]; Join only in the old plan: Hash Match (Inner Join) ×3; Join only in the new plan: Hash Match (Inner Join); Nested Loops (Inner Join) ×2
Candidate cause: WORKLOAD — The plans see a different workload: rows per execution 1.07 → 7.5. The plans may have been compiled for different parameters or batch sizes.
Counter-evidence: ORDER_UNCERTAIN — STATS candidate ruled out: the time of the perf.QdsRuntimeStats.PK_QdsRuntimeStats event (2026-09-29 22:11) spans the change, so whether it happened before or after is unknown.
Counter-evidence: ORDER_UNCERTAIN — STATS candidate ruled out: the time of the perf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD event (2026-09-29 22:11) spans the change, so whether it happened before or after is unknown.
Counter-evidence: ORDER_UNCERTAIN — STATS candidate ruled out: the time of the perf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD event (2026-09-29 22:11) spans the change, so whether it happened before or after is unknown.
Counter-evidence: ORDER_UNCERTAIN — STATS candidate ruled out: the time of the perf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD event (2026-09-29 22:11) spans the change, so whether it happened before or after is unknown.
Counter-evidence: ORDER_UNCERTAIN — STATS candidate ruled out: the time of the perf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD event (2026-09-29 22:11) spans the change, so whether it happened before or after is unknown.
Counter-evidence: HIGH_VARIANCE — The old plan's duration standard deviation is 166% of the average: the average is not reliable.
Counter-evidence: HIGH_VARIANCE — The new plan's duration standard deviation is 158% of the average: the average is not reliable.
Counter-evidence: METADATA_GAP — Metadata collection started on 2026-10-01 and the change was on 2026-09-29: index, statistics and module events could not be evaluated (no data, not no events).
Confidence rationale: Medium: a single candidate (WORKLOAD), not mechanical (no direct link to the plan is proven). Weak counter-evidence: HIGH_VARIANCE, METADATA_GAP.
Note: this is a candidate cause, not proof of the root cause.

7. Karar

Karar vermek için Analyst rolü gerekir.

Karar geçmişi

Kayıt yok

Henüz karar yok.