Plan değişimi P410
Orta İyileşme 379,9× BekliyorDB-11 · query_id 25209 · değişim 30.09.2026 22:00 · plan 25803 → 25811 · Dönüşümlü (13 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
(@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 (25803) | Yeni plan (25811) | Değişim |
|---|---|---|---|
| Çalışma | 530 | 689 | |
| İptal / hata | 0 / 0 | 0 / 0 | |
| Süre ort. (ms) | 1.310,6 | 3,4 | -100% |
| Süre maks. (ms) | 4.995,7 | 13,1 | -100% |
| Süre sapma (ms) | 941,6 | 1,0 | -100% |
| CPU ort. (ms) | 1.292,3 | 3,4 | -100% |
| CPU maks. (ms) | 3.316,1 | 13,1 | -100% |
| Mantıksal okuma ort. | 460,4 | 911,1 | +98% |
| Mantıksal okuma maks. | 910,0 | 1.457,0 | +60% |
| Fiziksel okuma | 0,0 | 0,1 | |
| 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. | 253,4 | 231,5 | -9% |
| Satır maks. | 432,0 | 432,0 | 0% |
| Dönem | 30.09.2026 22:00 → 5.10.2026 13:00 | 30.09.2026 22:00 → 5.10.2026 13:00 |
Bekleme kategorileri
ms / çalışma| Bekleme kategorisi | Eski plan (25803) | Yeni plan (25811) |
|---|---|---|
| CPU | 19,5 | 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 | evet | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000008_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000007_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | hayır | hayır | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000004_5D80D6A1 | 30.09.2026 22:56 | → 4761/4761 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000015_5D80D6A1 | 30.09.2026 22:56 | → 4715/4715 | 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 | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000018_5D80D6A1 | 30.09.2026 22:53 | → 4761/4761 | 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 | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats.IX_QueryDailyStats_Query | 30.09.2026 22:56 | → 4761/4761 | evet | evet | sıra belirsiz |
| StatsUpdated | perf.QueryDailyStats._WA_Sys_00000006_5D80D6A1 | 30.09.2026 22:56 | → 4712/4712 | hayır | hayır | sıra belirsiz |
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.023 → 0.188; tahmini satır: 1 → 18.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 | perf.QueryDailyStats.PK_QueryDailyStats güncellendi 2026-09-30 22:56 (örnekleme %100) | değişimden önceki 48 saat | desteklemiyor | İstatistik perf.QueryDailyStats.PK_QueryDailyStats 2026-09-30 22:56 güncellendi (örnekleme %100); planlar bu istatistiği kullanıyor. |
| STATS | perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 güncellendi 2026-09-30 22:56 (örnekleme %100) | değişimden önceki 48 saat | desteklemiyor | İstatistik perf.QueryDailyStats._WA_Sys_00000003_5D80D6A1 2026-09-30 22:56 güncellendi (örnekleme %100); planlar bu istatistiği kullanıyor. |
| STATS | perf.QueryDailyStats._WA_Sys_00000004_5D80D6A1 güncellendi 2026-09-30 22:56 (örnekleme %100) | değişimden önceki 48 saat | desteklemiyor | İstatistik perf.QueryDailyStats._WA_Sys_00000004_5D80D6A1 2026-09-30 22:56 güncellendi (örnekleme %100); planlar bu istatistiği kullanıyor. |
| STATS | perf.QueryDailyStats.IX_QueryDailyStats_Query güncellendi 2026-09-30 22:56 (örnekleme %100) | değişimden önceki 48 saat | desteklemiyor | İstatistik perf.QueryDailyStats.IX_QueryDailyStats_Query 2026-09-30 22:56 güncellendi (örnekleme %100); planlar bu istatistiği kullanıyor. |
| STATS | 7 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_00000015_5D80D6A1, perf.QueryDailyStats._WA_Sys_00000016_5D80D6A1, perf.QueryDailyStats._WA_Sys_00000018_5D80D6A1 (+2). | |
| WORKLOAD | çalışma başına satır 253.37 → 231.48 (1.09×) | ≥ 2× | desteklemiyor | Çalışma başına satır benzer (253.37 → 231.48): iş yükü farkı yok. |
| PARAM | baskın plan 13 kez el değiştirdi | ≥ 3 | destekliyor | İki plan aynı dönemde sırayla kullanılıyor (13 el değiştirme): plan seçimi bir olaydan çok parametre değerine bağlı (parametre duyarlılığı). |
5. Karşı kanıtlar
- ORDER_UNCERTAIN (aday için güçlü): STATS adayı elendi: perf.QueryDailyStats.PK_QueryDailyStats olayının zamanı (2026-09-30 22:56) 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.QueryDailyStats._WA_Sys_00000003_5D80D6A1 olayının zamanı (2026-09-30 22:56) 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.QueryDailyStats._WA_Sys_00000004_5D80D6A1 olayının zamanı (2026-09-30 22:56) 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.QueryDailyStats.IX_QueryDailyStats_Query olayının zamanı (2026-09-30 22:56) değişim anını kapsıyor, önce mi sonra mı olduğu bilinmiyor.
- 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 #P410 | DB: DB-11 | Improvement | Confidence: Medium (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 22:00 UTC, plan 25803 → 25811, pattern: Alternating (13 switches) Impact (Query Store, per execution): duration 1310.6 → 3.4 ms (-100%); CPU 1292.3 → 3.4 ms (-100%); reads 460 → 911 (+98%); rows 253.37 → 231.48 (-9%) 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: PARAM — The two plans alternate in the same period (13 switches): plan choice depends on the parameter value rather than an event (parameter sensitivity). Counter-evidence: ORDER_UNCERTAIN — STATS candidate ruled out: the time of the perf.QueryDailyStats.PK_QueryDailyStats event (2026-09-30 22:56) 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.QueryDailyStats._WA_Sys_00000003_5D80D6A1 event (2026-09-30 22:56) 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.QueryDailyStats._WA_Sys_00000004_5D80D6A1 event (2026-09-30 22:56) 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.QueryDailyStats.IX_QueryDailyStats_Query event (2026-09-30 22:56) spans the change, so whether it happened before or after is 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: 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.