Plan değişimi P409
Düşük İyileşme 74,4× BekliyorDB-11 · query_id 14619 · değişim 30.09.2026 10:00 · plan 12529 → 13624 · Geçiş · Sorgu detayı ve analizleri
Güven gerekçesiDüşük: destekleyen aday yok — neden bilinmiyor. Olay verisi eksik (metadata toplama değişimden sonra başladı).
Sorgu metni
(@keys nvarchar(4000),@from datetime,@to datetime)SELECT q.ServerID, q.DatabaseName, q.query_hash, q.StatDateUtc, SUM(q.TotalDurationMs) / NULLIF(SUM(q.Executions), 0) FROM OPENJSON(@keys) WITH (s int '$.s', d sysname '$.d', h varchar(18) '$.h') AS k JOIN perf.QueryDailyStats AS q ON q.ServerID = k.s AND q.DatabaseName = k.d AND q.query_hash = CONVERT(binary(8), k.h, 1) WHERE q.StatDateUtc >= @from AND q.StatDateUtc <= @to GROUP BY q.ServerID, q.DatabaseName, q.query_hash, q.StatDateUtc
1. Etki özeti
| Metrik | Eski plan (12529) | Yeni plan (13624) | Değişim |
|---|---|---|---|
| Çalışma | 149 | 211 | |
| İptal / hata | 0 / 0 | 0 / 0 | |
| Süre ort. (ms) | 287,6 | 3,9 | -99% |
| Süre maks. (ms) | 657,3 | 15,5 | -98% |
| Süre sapma (ms) | 247,3 | 1,2 | -100% |
| CPU ort. (ms) | 287,3 | 3,9 | -99% |
| CPU maks. (ms) | 657,3 | 15,5 | -98% |
| Mantıksal okuma ort. | 108,7 | 1.147,2 | +955% |
| Mantıksal okuma maks. | 181,0 | 1.475,0 | +715% |
| Fiziksel okuma | 0,0 | 0,0 | |
| Yazma | 0,0 | 0,0 | |
| Bellek (KB) | 1.024,0 | 1.024,0 | 0% |
| Tempdb (KB) | 0,0 | 0,0 | |
| DOP | 1,0 | 1,0 | 0% |
| Satır ort. | 197,2 | 333,3 | +69% |
| Satır maks. | 432,0 | 432,0 | 0% |
| Dönem | 30.09.2026 10:00 → 5.10.2026 12:00 | 30.09.2026 10:00 → 30.09.2026 23:00 |
Bekleme kategorileri
ms / çalışma| Bekleme kategorisi | Eski plan (12529) | Yeni plan (13624) |
|---|---|---|
| Memory | – | 0,0 |
| CPU | 0,6 | – |
2. Zaman çizelgesi
Eski planYeni plan
┆ değişim anı (kesik çizgi)░ olay (bant: zamanı aralık olarak bilinen)
Pencerede olay yok — metadata toplama 1.10.2026 tarihinde başladı, değişimden önceki olaylar görülemez (veri yok).
3. Plan karşılaştırması
- Yalnız eski planda erişim: perf.QueryDailyStats Clustered Index Seek [PK_QueryDailyStats]
- Yalnız yeni planda erişim: perf.QueryDailyStats Index Seek [IX_QueryDailyStats_Query]; perf.QueryDailyStats Clustered Index Seek [PK_QueryDailyStats] (lookup)
- Yalnız eski planda join: Nested Loops (Inner Join)
- Yalnız yeni planda join: Nested Loops (Inner Join) ×2
- Tahmini maliyet: 0.017 → 0.188; tahmini satır: 1 → 18.6
- Eski planın index'leri
- perf.QueryDailyStats.PK_QueryDailyStats
- Yeni planın index'leri
- perf.QueryDailyStats.IX_QueryDailyStats_Query, perf.QueryDailyStats.PK_QueryDailyStats
4. Neden adayları
ölçüm ve eşikle; kesin değildir| Kod | Ölçülen | Eşik | Sonuç | Açıklama |
|---|---|---|---|---|
| WORKLOAD | çalışma başına satır 197.23 → 333.3 (1.69×) | ≥ 2× | desteklemiyor | Çalışma başına satır benzer (197.23 → 333.3): iş yükü farkı yok. |
| PARAM | baskın plan 2 kez el değiştirdi | ≥ 3 | desteklemiyor | Planlar dönüşümlü değil: yeni plan eskisinin yerini aldı. |
5. Karşı kanıtlar
- METADATA_GAP (zayıf): Metadata toplama 2026-10-01 tarihinde başladı, değişim 2026-09-30: 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 #P409 | DB: DB-11 | Improvement | Confidence: Low (review pending) Query: (@keys nvarchar(?),@from datetime,@to datetime)SELECT q.ServerID, q.DatabaseName, q.query_hash, q.StatDateUtc, SUM(q.TotalDurationMs) / NULLIF(SUM(q.Executions), ?) FROM OPENJSON(@keys) WITH (s int ?, d sysname ?, h varchar(?) ?) AS k JOIN perf.QueryDailyStats AS q ON q.ServerID = k.s AND q.DatabaseName = k.d AND q.query_hash = CONVERT(binary(?), k.h, ?) WHERE q.StatDateUtc >= @from AND q.StatDateUtc <= @to GROUP BY q.ServerID, q.DatabaseName, q.query_hash, q.StatDateUtc Change: 2026-09-30 10:00 UTC, plan 12529 → 13624, pattern: Transition Impact (Query Store, per execution): duration 287.6 → 3.9 ms (-99%); CPU 287.3 → 3.9 ms (-99%); reads 109 → 1,147 (+955%); rows 197.23 → 333.3 (+69%) Plan difference: Access only in the old plan: perf.QueryDailyStats Clustered Index Seek [PK_QueryDailyStats]; Access only in the new plan: perf.QueryDailyStats Index Seek [IX_QueryDailyStats_Query]; perf.QueryDailyStats Clustered Index Seek [PK_QueryDailyStats] (lookup); Join only in the old plan: Nested Loops (Inner Join); Join only in the new plan: Nested Loops (Inner Join) ×2 Candidate cause: none — cause unknown. Counter-evidence: METADATA_GAP — Metadata collection started on 2026-10-01 and the change was on 2026-09-30: index, statistics and module events could not be evaluated (no data, not no events). Confidence rationale: Low: no supporting candidate — cause unknown. Event data is missing (metadata collection started after the change). 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.