Plan değişimi P406
Orta Kötüleşme 23,8× BekliyorDB-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.| # | Planlar | Yön | Durum | Karar | Tespit |
|---|---|---|---|---|---|
| P407 | 33296 → 37020 | Kötüleşme 5,1× | Bekliyor | – | 9.10.2026 14:51 |
Sorgu metni
(@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(*) >= 21. Etki özeti
| Metrik | Eski plan (7197) | Yeni plan (8706) | Değişim |
|---|---|---|---|
| Çalışma | 187 | 834 | |
| İptal / hata | 0 / 0 | 0 / 0 | |
| Süre ort. (ms) | 10,6 | 253,4 | +2284% |
| Süre maks. (ms) | 160,7 | 4.427,0 | +2654% |
| Süre sapma (ms) | 17,7 | 401,0 | +2172% |
| CPU ort. (ms) | 10,2 | 248,6 | +2345% |
| CPU maks. (ms) | 85,8 | 1.336,6 | +1457% |
| Mantıksal okuma ort. | 187,1 | 148.118,5 | +79076% |
| Mantıksal okuma maks. | 1.752,0 | 601.442,0 | +34229% |
| Fiziksel okuma | 15,7 | 16,0 | +2% |
| Yazma | 0,0 | 0,0 | |
| Bellek (KB) | 5.709,3 | 7.148,7 | +25% |
| Tempdb (KB) | 12,3 | 109,6 | +789% |
| DOP | 1,0 | 1,0 | 0% |
| Satır ort. | 1,1 | 7,5 | +601% |
| Satır maks. | 6,0 | 20,0 | +233% |
| Dönem | 29.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 kategorisi | Eski plan (7197) | Yeni plan (8706) |
|---|---|---|
| Lock | – | 4,6 |
| Memory | 0,3 | 0,6 |
| CPU | – | 0,4 |
| Other Disk IO | – | 0,0 |
| Buffer IO | – | 0,0 |
| Idle | 0,5 | – |
2. Zaman çizelgesi
Eski planYeni plan
┆ değişim anı (kesik çizgi)░ olay (bant: zamanı aralık olarak bilinen)
Olaylar
| Olay | Nesne | Zaman | Önce → sonra | Eski plan kullanıyor | Yeni plan kullanıyor | |
|---|---|---|---|---|---|---|
| StatsUpdated | perf.QdsPlan._WA_Sys_00000007_58671BC9 | 29.09.2026 09:02 | → 1764/1764 | hayır | hayır | |
| StatsUpdated | perf.QdsRuntimeStats.PK_QdsRuntimeStats | 29.09.2026 22:11 | → 36991/42406 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD | 29.09.2026 22:11 | → 36991/42406 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD | 29.09.2026 22:11 | → 36991/42406 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD | 29.09.2026 22:11 | → 36991/42406 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD | 29.09.2026 22:11 | → 36991/42406 | evet | evet | 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çülen | Eşik | Sonuç | 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
- ORDER_UNCERTAIN (aday için güçlü): STATS adayı elendi: perf.QdsRuntimeStats.PK_QdsRuntimeStats olayının zamanı (2026-09-29 22:11) değişim anını kapsıyor, önce mi sonra mı olduğu bilinmiyor.
- ORDER_UNCERTAIN (aday için güçlü): STATS adayı elendi: perf.QdsRuntimeStats._WA_Sys_00000002_5C37ACAD olayının zamanı (2026-09-29 22:11) değişim anını kapsıyor, önce mi sonra mı olduğu bilinmiyor.
- ORDER_UNCERTAIN (aday için güçlü): STATS adayı elendi: perf.QdsRuntimeStats._WA_Sys_00000003_5C37ACAD olayının zamanı (2026-09-29 22:11) değişim anını kapsıyor, önce mi sonra mı olduğu bilinmiyor.
- ORDER_UNCERTAIN (aday için güçlü): STATS adayı elendi: perf.QdsRuntimeStats._WA_Sys_00000006_5C37ACAD olayının zamanı (2026-09-29 22:11) değişim anını kapsıyor, önce mi sonra mı olduğu bilinmiyor.
- ORDER_UNCERTAIN (aday için güçlü): STATS adayı elendi: perf.QdsRuntimeStats._WA_Sys_00000008_5C37ACAD olayının zamanı (2026-09-29 22:11) değişim anını kapsıyor, önce mi sonra mı olduğu bilinmiyor.
- HIGH_VARIANCE (zayıf): Eski planın süre sapması ortalamanın %166'i: ortalama güvenilir değil.
- HIGH_VARIANCE (zayıf): Yeni planın süre sapması ortalamanın %158'i: ortalama güvenilir değil.
- METADATA_GAP (zayıf): Metadata toplama 2026-10-01 tarihinde başladı, değişim 2026-09-29: index/istatistik/modül olayları değerlendirilemedi (olay yok değil, veri yok).
6. Korpus metni önizlemesi
onaylanınca RAG hafızasına bu metin girer (başlığa onaylayan eklenir)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.