SQL Server High CPU: Diagnose Queries, Compilations and Plan Regressions
Separates currently running from historical CPU-heavy queries and responds safely to plan regressions, compilations and stale statistics.
Operational Safety & Risk Notice
This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.
1. Symptom & Signals
- M27: SQL Server süreci CPU'yu uzun süre yüksek kullanıyor; sorgu gecikmesi ve uygulama zaman aşımı artıyor.
- CPU baskısı **işletim sistemi geneli mi, yoksa sqlservr süreci mi?** Önce bunu ayırın. Tek bir anlık sıçrama alarm için yeterli değildir.
2. Business & Technical Impact
İstekler kuyruklanır, yanıt süreleri uzar; CPU'ya duyarlı işler ve aynı sunucudaki diğer uygulamalar etkilenebilir.
3. Diagnosis & Root-Cause Analysis
SELECT TOP (20) r.session_id, r.status, r.command,
r.cpu_time AS request_cpu_ms, r.total_elapsed_time AS elapsed_ms,
r.logical_reads, r.wait_type,
DB_NAME(r.database_id) AS database_name,
s.login_name, s.host_name,
SUBSTRING(t.text, r.statement_start_offset/2 + 1,
(CASE WHEN r.statement_end_offset = -1 THEN DATALENGTH(t.text)
ELSE r.statement_end_offset END - r.statement_start_offset)/2 + 1) AS statement_text
FROM sys.dm_exec_requests AS r
JOIN sys.dm_exec_sessions AS s ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID AND s.is_user_process = 1
ORDER BY r.cpu_time DESC;4. Remediation & Action Plan
UPDATE STATISTICS dbo.OrnekTablo (OrnekIstatistik) WITH FULLSCAN;İsimleri gerçek nesnelerle değiştirin; büyük tabloda FULLSCAN pahalıdır, gerekiyorsa örneklem kullanın.
KILL 123; -- 123 yerine doğrulanmış session_id
KILL 123 WITH STATUSONLY; -- rollback varsa ilerlemesini sorgular4. **Kalıcı çözüm:** Sorgu/indeks tasarımını düzeltin, uygulamada parametreli sorgu kullanın, uygun olduğunda Query Store regresyon takibi kurun. `MAXDOP` ve `cost threshold for parallelism` değerlerini tek CPU grafiğine bakarak sunucu genelinde değiştirmeyin.
5. **Yapmayın:** `DBCC FREEPROCCACHE` ile tüm planları silmek derleme fırtınası yaratır; CPU sorununa genel çözüm değildir.
5. Verification & Health Checks
- SQL Server ve işletim sistemi CPU'su baseline'a döndü, M27 değerlendirme penceresi boyunca normale indi.
- Uygulamanın p95/p99 gecikmesi ve hata oranı düzeldi; Query Store'da aynı sorgunun CPU/çalıştırma süresi azaldı.
6. Rollback & Contingency Plan
- Deployment veya Query Store plan zorlama değişikliği varsa önceki duruma dönün; `KILL` geri alınamaz, işlem geri sarılır.
- İstatistik güncellemesini doğrudan geri alamazsınız; gerekirse eski planı Query Store üzerinden kontrollü geri yükleyin. Örnek bir planı zorlamadan önce üretim onayı alın.