Plan değişimi P405
Orta İyileşme 40,5× BekliyorDB-11 · query_id 3708 · değişim 28.09.2026 12:00 · plan 4742 → 5661 · Dönüşümlü (16 el değiştirme) · Sorgu detayı ve analizleri
Güven gerekçesiOrta: tek aday (PARAM), mekanik değil (plan ile doğrudan bağ kanıtlanmıyor). Zayıf karşı kanıt: METADATA_GAP.
Sorgu metni
(@srv int,@dbName nvarchar(4000),@hash varbinary(8),@from datetime,@to datetime)SELECT StatDateUtc AS DayUtc, Executions, TotalCpuMs, TotalDurationMs, P95DurationMs, TotalLogicalReads, HourBuckets FROM perf.QueryDailyStats WHERE ServerID = @srv AND DatabaseName = @dbName AND query_hash = @hash AND StatDateUtc BETWEEN @from AND @to ORDER BY StatDateUtc
1. Etki özeti
| Metrik | Eski plan (4742) | Yeni plan (5661) | Değişim |
|---|---|---|---|
| Çalışma | 129.538 | 91.947 | |
| İptal / hata | 0 / 0 | 0 / 0 | |
| Süre ort. (ms) | 5,3 | 0,1 | -98% |
| Süre maks. (ms) | 58,4 | 10,4 | -82% |
| Süre sapma (ms) | 0,9 | 0,1 | -90% |
| CPU ort. (ms) | 5,3 | 0,1 | -98% |
| CPU maks. (ms) | 58,4 | 10,4 | -82% |
| Mantıksal okuma ort. | 752,5 | 16,7 | -98% |
| Mantıksal okuma maks. | 893,0 | 1.102,0 | +23% |
| Fiziksel okuma | 0,0 | 0,0 | +544% |
| Yazma | 0,0 | 0,0 | |
| Bellek (KB) | 0,0 | 0,0 | |
| Tempdb (KB) | 0,0 | 0,0 | |
| DOP | 1,0 | 1,0 | 0% |
| Satır ort. | 3,8 | 3,7 | -3% |
| Satır maks. | 7,0 | 7,0 | 0% |
| Dönem | 28.09.2026 11:00 → 8.10.2026 20:00 | 28.09.2026 12:00 → 8.10.2026 16:00 |
Bekleme kategorileri
ms / çalışma| Bekleme kategorisi | Eski plan (4742) | Yeni plan (5661) |
|---|---|---|
| Buffer IO | – | 0,0 |
| CPU | 0,0 | 0,0 |
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.QueryDailyStats._WA_Sys_00000002_5D80D6A1 | 27.09.2026 22:55 | → 2237/2237 | hayır | hayır |
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 yeni planda join: Nested Loops (Inner Join)
- Tahmini maliyet: 0.004 → 0.025; tahmini satır: 1 → 7.3
- 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 |
|---|---|---|---|---|
| STATS | 1 istatistik güncellendi, planlar kullanmıyor | desteklemiyor | Pencerede güncellenen ama iki planın da kullanmadığı istatistikler aday değil: perf.QueryDailyStats._WA_Sys_00000002_5D80D6A1. | |
| WORKLOAD | çalışma başına satır 3.84 → 3.74 (1.03×) | ≥ 2× | desteklemiyor | Çalışma başına satır benzer (3.84 → 3.74): iş yükü farkı yok. |
| PARAM | baskın plan 16 kez el değiştirdi | ≥ 3 | destekliyor | İki plan aynı dönemde sırayla kullanılıyor (16 el değiştirme): plan seçimi bir olaydan çok parametre değerine bağlı (parametre duyarlılığı). |
5. Karşı kanıtlar
- METADATA_GAP (zayıf): Metadata toplama 2026-10-01 tarihinde başladı, değişim 2026-09-28: 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 #P405 | DB: DB-11 | Improvement | Confidence: Medium (review pending) Query: (@srv int,@dbName nvarchar(?),@hash varbinary(?),@from datetime,@to datetime)SELECT StatDateUtc AS DayUtc, Executions, TotalCpuMs, TotalDurationMs, P95DurationMs, TotalLogicalReads, HourBuckets FROM perf.QueryDailyStats WHERE ServerID = @srv AND DatabaseName = @dbName AND query_hash = @hash AND StatDateUtc BETWEEN @from AND @to ORDER BY StatDateUtc Change: 2026-09-28 12:00 UTC, plan 4742 → 5661, pattern: Alternating (16 switches) Impact (Query Store, per execution): duration 5.3 → 0.1 ms (-98%); CPU 5.3 → 0.1 ms (-98%); reads 752 → 17 (-98%); rows 3.84 → 3.74 (-3%) 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 new plan: Nested Loops (Inner Join); Estimated cost: 0.004 → 0.025; estimated rows: 1 → 7.3 Candidate cause: PARAM — The two plans alternate in the same period (16 switches): plan choice depends on the parameter value rather than an event (parameter sensitivity). Counter-evidence: METADATA_GAP — Metadata collection started on 2026-10-01 and the change was on 2026-09-28: index, statistics and module events could not be evaluated (no data, not no events). Confidence rationale: Medium: a single candidate (PARAM), not mechanical (no direct link to the plan is proven). Weak counter-evidence: 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.