Plan değişimi P450
Orta İyileşme 1,3× BekliyorDB-10 · query_id 2072 · değişim 28.09.2026 10:00 · plan 582 → 627 · Geçiş · Sorgu detayı ve analizleri
Güven gerekçesiOrta: tek mekanik aday (FORCED) ama zayıf karşı kanıt (HIGH_VARIANCE, METADATA_GAP).
Sorgu metni
(@from_utc datetime2(7),@to_utc datetime2(7),@epoch datetime2(7),@bucket int)INSERT INTO dbo.instance_counters_1m
(bucket, instance_id, metric, scope, avg_value, max_value, min_value, last_value, samples)
SELECT k.bucket,
k.instance_id,
k.metric,
k.scope,
AVG(k.value),
MAX(k.value),
MIN(k.value),
-- SON DEGER PENCERENIN SONUNDAN OKUNUR, MAX'TAN DEGIL:
-- kumulatif bir sayacta ikisi ayni cikar, dalgalanan bir
-- sayacta ayrilir ve "son" sozcugu MAX'a kaydirilirsa
-- kolon adiyla icerigi celisir.
--
-- SIRA NUMARASI TEK GECISTE HESAPLANIR. Onceki bicim
-- kovanin son anini `CROSS APPLY` ile HER SATIR ICIN
-- yeniden ariyordu; olculdu (2026-09-01): iki bin
-- dakikalik bir yakalama turu 20 saniyeden 900 saniyeye
-- kadar cikti ve motor kendi ilk dolumunu bitiremedi.
-- Pencere islevi ayni cevabi tek taramada verir --
-- p95'te de ayni cozum kullanildi.
MAX(CASE WHEN k.rn = 1 THEN k.value END),
COUNT_BIG(*)
FROM (
SELECT DATEADD(SECOND, (DATEDIFF_BIG(SECOND, @epoch, c.ts) / @bucket) * @bucket, @epoch) AS bucket,
c.instance_id,
c.metric,
c.scope,
c.value,
ROW_NUMBER() OVER (
PARTITION BY
DATEADD(SECOND, (DATEDIFF_BIG(SECOND, @epoch, c.ts) / @bucket) * @bucket, @epoch),
c.instance_id, c.metric, c.scope
ORDER BY c.ts DESC) AS rn
FROM dbo.instance_counters AS c
WHERE c.ts >= @from_utc AND c.ts < @to_utc
) AS k
GROUP BY k.bucket, k.instance_id, k.metric, k.scope1. Etki özeti
| Metrik | Eski plan (582) | Yeni plan (627) | Değişim |
|---|---|---|---|
| Çalışma | 135 | 319 | |
| İptal / hata | 0 / 0 | 0 / 0 | |
| Süre ort. (ms) | 1.935,0 | 1.480,1 | -24% |
| Süre maks. (ms) | 164.482,1 | 446.995,2 | +172% |
| Süre sapma (ms) | 15.359,9 | 24.983,3 | +63% |
| CPU ort. (ms) | 183,1 | 74,4 | -59% |
| CPU maks. (ms) | 861,5 | 384,5 | -55% |
| Mantıksal okuma ort. | 12.107,1 | 6.397,5 | -47% |
| Mantıksal okuma maks. | 20.606,0 | 37.873,0 | +84% |
| Fiziksel okuma | 70,1 | 7,9 | -89% |
| Yazma | 17,4 | 16,1 | -8% |
| Bellek (KB) | 382.205,6 | 58.363,5 | -85% |
| Tempdb (KB) | 0,0 | 0,0 | |
| DOP | 1,0 | 1,0 | 0% |
| Satır ort. | 995,4 | 996,5 | 0% |
| Satır maks. | 1.622,0 | 2.842,0 | +75% |
| Dönem | 27.09.2026 22:00 → 29.09.2026 19:00 | 28.09.2026 10:00 → 29.09.2026 14:00 |
Bekleme kategorileri
ms / çalışma| Bekleme kategorisi | Eski plan (582) | Yeni plan (627) |
|---|---|---|
| Memory | 1.742,4 | 1.402,7 |
| CPU | 11,1 | 4,8 |
| Buffer IO | 1,4 | 0,1 |
| Tran Log IO | 0,4 | 0,1 |
| Latch | – | 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 | |
|---|---|---|---|---|---|---|
| PlanUnforced | bilinmiyor | bilinmiyor | bilinmiyor | |||
| TableGrowth | dbo.instance_counters | 27.09.2026 00:00 – 28.09.2026 00:00 | 4704073|225.16 → 4958115|112.86 | bilinmiyor | bilinmiyor | |
| TableGrowth | dbo.instance_counters_1m | 27.09.2026 00:00 – 28.09.2026 00:00 | 3822948|287.15 → 4066948|124.03 | bilinmiyor | bilinmiyor |
3. Plan karşılaştırması
- Operatör düzeyinde fark yok: süre farkı büyük olasılıkla beklemeden ya da parametre değerinden.
- Eski planın index'leri
- dbo.instance_counters_1m.cci_instance_counters_1m, dbo.instance_counters.cci_instance_counters
- Yeni planın index'leri
- dbo.instance_counters_1m.cci_instance_counters_1m, dbo.instance_counters.cci_instance_counters
4. Neden adayları
ölçüm ve eşikle; kesin değildir| Kod | Ölçülen | Eşik | Sonuç | Açıklama |
|---|---|---|---|---|
| FORCEDmekanik | eski planın zorlaması kalkmış | destekliyor | Eski plan zorlanmıştı, yeni plan zorlanmamış: zorlama kaldırılmış ya da başarısız. | |
| GROWTH | dbo.instance_counters: satır 4,704,073 → 4,958,115 (%+5), boyut 225.16 → 112.86 MB (%-50) | ≥ %20 | desteklemiyor | dbo.instance_counters eski planın döneminden değişime kadar satır %+5, boyut %-50 değişti (2026-09-27 → 2026-09-28). |
| GROWTH | dbo.instance_counters_1m: satır 3,822,948 → 4,066,948 (%+6), boyut 287.15 → 124.03 MB (%-57) | ≥ %20 | desteklemiyor | dbo.instance_counters_1m eski planın döneminden değişime kadar satır %+6, boyut %-57 değişti (2026-09-27 → 2026-09-28). |
| WORKLOAD | çalışma başına satır 995.36 → 996.53 (1×) | ≥ 2× | desteklemiyor | Çalışma başına satır benzer (995.36 → 996.53): 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
- HIGH_VARIANCE (zayıf): Eski planın süre sapması ortalamanın %794'i: ortalama güvenilir değil.
- HIGH_VARIANCE (zayıf): Yeni planın süre sapması ortalamanın %1688'i: ortalama güvenilir değil.
- METADATA_GAP (zayıf): Metadata toplama 2026-09-27 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 #P450 | DB: DB-10 | Improvement | Confidence: Medium (review pending) Query: (@from_utc datetime2(?),@to_utc datetime2(?),@epoch datetime2(?),@bucket int)INSERT INTO dbo.instance_counters_1m (bucket, instance_id, metric, scope, avg_value, max_value, min_value, last_value, samples) SELECT k.bucket, k.instance_id, k.metric, k.scope, AVG(k.value), MAX(k.value), MIN(k.value), MAX(CASE WHEN k.rn = ? THEN k.value END), COUNT_BIG(*) FROM ( SELECT DATEADD(SECOND, (DATEDIFF_BIG(SECOND, @epoch, c.ts) / @bucket) * @bucket, @epoch) AS bucket, c.instance_id, c.metric, c.scope, c.value, ROW_NUMBER() OVER ( PARTITION BY DATEADD(SECOND, (DATEDIFF_BIG(SECOND, @epoch, c.ts) / @bucket) * @bucket, @epoch), c.instance_id, c.metric, c.scope ORDER BY c.ts DESC) AS rn FROM dbo.instance_counters AS c WHERE c.ts >= @from_utc AND c.ts < @to_utc ) AS k GROUP BY k.bucket, k.instance_id, k.metric, k.scope Change: 2026-09-28 10:00 UTC, plan 582 → 627, pattern: Transition Impact (Query Store, per execution): duration 1935 → 1480.1 ms (-24%); CPU 183.1 → 74.4 ms (-59%); reads 12,107 → 6,397 (-47%); rows 995.36 → 996.53 (+0%) Plan difference: no operator-level difference Candidate cause: FORCED — The old plan was forced and the new plan is not: forcing was removed or failed. Counter-evidence: HIGH_VARIANCE — The old plan's duration standard deviation is 794% of the average: the average is not reliable. Counter-evidence: HIGH_VARIANCE — The new plan's duration standard deviation is 1688% of the average: the average is not reliable. Counter-evidence: METADATA_GAP — Metadata collection started on 2026-09-27 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 mechanical candidate (FORCED) but 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.