Plan değişimi P411
Orta İyileşme 78,0× BekliyorDB-11 · query_id 27966 · rag.usp_QueryCandidates_Mark · değişim 1.10.2026 21:00 · plan 30730 → 30856 · Dönüşümlü (7 el değiştirme) · Sorgu detayı ve analizleri
Güven gerekçesiOrta: birden fazla aday (STATS, WORKLOAD + PARAM) — rakip açıklamalar. Zayıf karşı kanıt: LOW_SAMPLE, METADATA_GAP.
Sorgu metni
(@days int,@from date,@to date)SELECT q.ServerID, q.DatabaseName, q.query_hash,
SUM(IIF(q.StatDateUtc >= @from, ISNULL(q.Executions, 0), 0)) AS CExec,
SUM(IIF(q.StatDateUtc >= @from, ISNULL(q.TotalCpuMs, 0), 0)) AS CCpu,
SUM(IIF(q.StatDateUtc >= @from, ISNULL(q.TotalDurationMs, 0), 0)) AS CDur,
SUM(IIF(q.StatDateUtc >= @from, ISNULL(CAST(q.BlockedOthersCount AS bigint), 0), 0)) AS CBlock,
SUM(IIF(q.StatDateUtc < @from, ISNULL(q.Executions, 0), 0)) AS PExec,
SUM(IIF(q.StatDateUtc < @from, ISNULL(q.TotalDurationMs, 0), 0)) AS PDur
INTO #s
FROM perf.QueryDailyStats AS q
JOIN DBA.ManagedServers AS ms ON ms.ServerID = q.ServerID AND ISNULL(ms.IsActive, 0) = 1
JOIN DBA.MonitoredDatabase AS md ON md.ServerID = q.ServerID AND md.DatabaseName = q.DatabaseName AND md.IsActive = 1
WHERE q.StatDateUtc >= DATEADD(day, -@days, CAST(@from AS datetime)) AND q.StatDateUtc <= @to
GROUP BY q.ServerID, q.DatabaseName, q.query_hash1. Etki özeti
| Metrik | Eski plan (30730) | Yeni plan (30856) | Değişim |
|---|---|---|---|
| Çalışma | 36 | 358 | |
| İptal / hata | 0 / 0 | 0 / 0 | |
| Süre ort. (ms) | 112,0 | 1,4 | -99% |
| Süre maks. (ms) | 175,3 | 5,3 | -97% |
| Süre sapma (ms) | 16,2 | 0,4 | -98% |
| CPU ort. (ms) | 111,9 | 1,4 | -99% |
| CPU maks. (ms) | 174,6 | 5,3 | -97% |
| Mantıksal okuma ort. | 40.897,6 | 123,0 | -100% |
| Mantıksal okuma maks. | 48.996,0 | 149,0 | -100% |
| Fiziksel okuma | 36,2 | 0,0 | -100% |
| Yazma | 44,6 | 0,8 | -98% |
| Bellek (KB) | 8.629,8 | 1.024,0 | -88% |
| Tempdb (KB) | 682,7 | 128,0 | -81% |
| DOP | 1,0 | 1,0 | 0% |
| Satır ort. | 4.198,8 | 0,0 | -100% |
| Satır maks. | 4.500,0 | 0,0 | -100% |
| Dönem | 1.10.2026 21:00 → 8.10.2026 09:00 | 1.10.2026 21:00 → 6.10.2026 06:00 |
Bekleme kategorileri
ms / çalışma| Bekleme kategorisi | Eski plan (30730) | Yeni plan (30856) |
|---|---|---|
| CPU | 0,1 | 0,0 |
| Memory | 0,4 | – |
| Other Disk IO | 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.PK_QueryDailyStats | 30.09.2026 22:56 | → 4761/4761 | evet | hayır | |
| StatsUpdated | perf.QueryDailyStats.PK_QueryDailyStats | 1.10.2026 21:13 | → 8811/8811 | evet | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000008_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000008_5D80D6A1 | 1.10.2026 21:13 | → 8860/8860 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | evet | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 | 1.10.2026 21:13 | → 8811/8811 | evet | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000007_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000007_5D80D6A1 | 1.10.2026 21:13 | → 8814/8814 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000004_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000004_5D80D6A1 | 1.10.2026 21:13 | → 8811/8811 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000015_5D80D6A1 | 30.09.2026 22:56 | → 4715/4715 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000015_5D80D6A1 | 1.10.2026 21:13 | → 8814/8814 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000016_5D80D6A1 | 30.09.2026 22:53 | → 4761/4761 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000016_5D80D6A1 | 1.10.2026 21:13 | → 8814/8814 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000018_5D80D6A1 | 30.09.2026 22:53 | → 4761/4761 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000018_5D80D6A1 | 1.10.2026 21:13 | → 8814/8814 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_0000001B_5D80D6A1 | 30.09.2026 22:56 | → 4715/4715 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_0000001B_5D80D6A1 | 1.10.2026 21:13 | → 8814/8814 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats.IX_QueryDailyStats_Query | 30.09.2026 22:56 | → 4761/4761 | evet | hayır | |
| StatsUpdated | perf.QueryDailyStats.IX_QueryDailyStats_Query | 1.10.2026 21:13 | → 8811/8811 | evet | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000006_5D80D6A1 | 30.09.2026 22:56 | → 4712/4712 | hayır | hayır | |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000006_5D80D6A1 | 1.10.2026 21:00 | → 4712/4712 | hayır | hayır | sıra belirsiz |
3. Plan karşılaştırması
- Yalnız eski planda erişim: DBA.ManagedServers Clustered Index Scan [PK__ManagedS__C56AC8865E257CFD]; perf.QueryDailyStats Clustered Index Seek [PK_QueryDailyStats]
- Yalnız yeni planda erişim: perf.QueryDailyStats Table Scan; DBA.ManagedServers Clustered Index Seek [PK__ManagedS__C56AC8865E257CFD]
- Yalnız eski planda join: Hash Match (Inner Join); Nested Loops (Inner Join)
- Yalnız yeni planda join: Nested Loops (Inner Join) ×2
- Tahmini maliyet: 0.447 → 0.031; tahmini satır: 90.5 → 1
- Eski planın index'leri
- DBA.ManagedServers.PK__ManagedS__C56AC8865E257CFD, perf.QueryDailyStats.PK_QueryDailyStats, DBA.MonitoredDatabase.PK_MonitoredDatabase
- Yeni planın index'leri
- DBA.MonitoredDatabase.PK_MonitoredDatabase, DBA.ManagedServers.PK__ManagedS__C56AC8865E257CFD
4. Neden adayları
ölçüm ve eşikle; kesin değildir| Kod | Ölçülen | Eşik | Sonuç | Açıklama |
|---|---|---|---|---|
| STATS | perf.QueryDailyStats.PK_QueryDailyStats güncellendi 2026-09-30 22:56 (örnekleme %100); pencerede 2 güncelleme | değişimden önceki 48 saat | destekliyor | İstatistik perf.QueryDailyStats.PK_QueryDailyStats 2026-09-30 22:56 güncellendi (örnekleme %100); pencerede 2 güncelleme; planlar bu istatistiği kullanıyor. |
| STATS | perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 güncellendi 2026-09-30 22:56 (örnekleme %100); pencerede 2 güncelleme | değişimden önceki 48 saat | destekliyor | İstatistik perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 2026-09-30 22:56 güncellendi (örnekleme %100); pencerede 2 güncelleme; planlar bu istatistiği kullanıyor. |
| STATS | perf.QueryDailyStats.IX_QueryDailyStats_Query güncellendi 2026-09-30 22:56 (örnekleme %100); pencerede 2 güncelleme | değişimden önceki 48 saat | destekliyor | İstatistik perf.QueryDailyStats.IX_QueryDailyStats_Query 2026-09-30 22:56 güncellendi (örnekleme %100); pencerede 2 güncelleme; planlar bu istatistiği kullanıyor. |
| STATS | 8 istatistik güncellendi, planlar kullanmıyor | desteklemiyor | Pencerede güncellenen ama iki planın da kullanmadığı istatistikler aday değil: perf.QueryDailyStats._WA_Sys_00000008_5D80D6A1, perf.QueryDailyStats._WA_Sys_00000007_5D80D6A1, perf.QueryDailyStats._WA_Sys_00000004_5D80D6A1, perf.QueryDailyStats._WA_Sys_00000015_5D80D6A1, perf.QueryDailyStats._WA_Sys_00000016_5D80D6A1 (+3). | |
| WORKLOAD | çalışma başına satır 4198.83 → 0 (4198833333333.33×) | ≥ 2× | destekliyor | Planlar farklı iş yükü görüyor: çalışma başına satır 4198.83 → 0. Planlar farklı parametre/parti büyüklüğü için derlenmiş olabilir. |
| PARAM | baskın plan 7 kez el değiştirdi | ≥ 3 | destekliyor | İki plan aynı dönemde sırayla kullanılıyor (7 el değiştirme): plan seçimi bir olaydan çok parametre değerine bağlı (parametre duyarlılığı). |
5. Karşı kanıtlar
- LOW_SAMPLE (zayıf): Eski plan yalnız 36 kez çalışmış: örnek az, ortalama zayıf.
- METADATA_GAP (zayıf): Metadata toplama 2026-10-01 tarihinde başladı, değişim 2026-10-01: 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 #P411 | DB: DB-11 | Improvement | Confidence: Medium (review pending) Query: (@days int,@from date,@to date)SELECT q.ServerID, q.DatabaseName, q.query_hash, SUM(IIF(q.StatDateUtc >= @from, ISNULL(q.Executions, ?), ?)) AS CExec, SUM(IIF(q.StatDateUtc >= @from, ISNULL(q.TotalCpuMs, ?), ?)) AS CCpu, SUM(IIF(q.StatDateUtc >= @from, ISNULL(q.TotalDurationMs, ?), ?)) AS CDur, SUM(IIF(q.StatDateUtc >= @from, ISNULL(CAST(q.BlockedOthersCount AS bigint), ?), ?)) AS CBlock, SUM(IIF(q.StatDateUtc < @from, ISNULL(q.Executions, ?), ?)) AS PExec, SUM(IIF(q.StatDateUtc < @from, ISNULL(q.TotalDurationMs, ?), ?)) AS PDur INTO #s FROM perf.QueryDailyStats AS q JOIN DBA.ManagedServers AS ms ON ms.ServerID = q.ServerID AND ISNULL(ms.IsActive, ?) = ? JOIN DBA.MonitoredDatabase AS md ON md.ServerID = q.ServerID AND md.DatabaseName = q.DatabaseName AND md.IsActive = ? WHERE q.StatDateUtc >= DATEADD(day, -@days, CAST(@from AS datetime)) AND q.StatDateUtc <= @to GROUP BY q.ServerID, q.DatabaseName, q.query_hash Change: 2026-10-01 21:00 UTC, plan 30730 → 30856, pattern: Alternating (7 switches) Impact (Query Store, per execution): duration 112 → 1.4 ms (-99%); CPU 111.9 → 1.4 ms (-99%); reads 40,898 → 123 (-100%); rows 4198.83 → 0 (-100%) Plan difference: Access only in the old plan: DBA.ManagedServers Clustered Index Scan [PK__ManagedS__C56AC8865E257CFD]; perf.QueryDailyStats Clustered Index Seek [PK_QueryDailyStats]; Access only in the new plan: perf.QueryDailyStats Table Scan; DBA.ManagedServers Clustered Index Seek [PK__ManagedS__C56AC8865E257CFD]; Join only in the old plan: Hash Match (Inner Join); Nested Loops (Inner Join); Join only in the new plan: Nested Loops (Inner Join) ×2 Candidate cause: STATS — Statistic perf.QueryDailyStats.PK_QueryDailyStats was updated 2026-09-30 22:56 (sampled 100%); 2 updates in the window; the plans use this statistic. Candidate cause: STATS — Statistic perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 was updated 2026-09-30 22:56 (sampled 100%); 2 updates in the window; the plans use this statistic. Candidate cause: STATS — Statistic perf.QueryDailyStats.IX_QueryDailyStats_Query was updated 2026-09-30 22:56 (sampled 100%); 2 updates in the window; the plans use this statistic. Candidate cause: WORKLOAD — The plans see a different workload: rows per execution 4198.83 → 0. The plans may have been compiled for different parameters or batch sizes. Candidate cause: PARAM — The two plans alternate in the same period (7 switches): plan choice depends on the parameter value rather than an event (parameter sensitivity). Counter-evidence: LOW_SAMPLE — The old plan ran only 36 times: the sample is small and the average is weak. Counter-evidence: METADATA_GAP — Metadata collection started on 2026-10-01 and the change was on 2026-10-01: index, statistics and module events could not be evaluated (no data, not no events). Confidence rationale: Medium: more than one candidate (STATS, WORKLOAD + PARAM) — competing explanations. Weak counter-evidence: LOW_SAMPLE, 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.