Wait statistics, SQL Server iş yükünü anlamak için en güçlü sinyallerden biridir; ancak bir wait adı kök neden değildir. Yalnızca worker sürelerinin nerede biriktiğini gösterir. Güvenilir inceleme, doğru zaman aralığını sorgu kanıtları, kaynak sayaçları ve uygulama bağlamıyla birleştirir.
[company_article_image src=”articles/wait-statistics-investigation.svg” alt=”Belirtiden ölçülmüş değişikliğe SQL Server wait statistics inceleme akışı” caption=”Wait türü inceleme alanını daraltır; nedeni sorgu ve altyapı kanıtları belirler.”]
Kontrollü bir zaman aralığıyla başlayın
Instance seviyesindeki sayaçlar son servis başlangıcından veya sıfırlamadan itibaren birikir. İncelenen olayın başında ve sonunda iki snapshot alıp farkı hesaplamak, tüm tarihsel toplamı yorumlamaktan daha güvenlidir. Raporu kolaylaştırmak için üretimde sayaçları sıfırlamayın.
SELECT wait_type, waiting_tasks_count, wait_time_ms,
signal_wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_time_ms > 0
ORDER BY wait_time_ms DESC;
Önce sınıflandırın, sonra aksiyon alın
- PAGEIOLATCH_*: Sayfaların belleğe okunması bekleniyor olabilir. Sorgu okumaları, index tasarımı, bellek baskısı ve depolama gecikmesi birlikte incelenmelidir.
- WRITELOG: Transaction log flush süresi; transaction tasarımı, log throughput ve storage ile ilişkilendirilmelidir.
- LCK_*: İzolasyon seviyesini değiştirmeden önce blocking chain ve transaction sınırları bulunmalıdır.
- CXPACKET/CXCONSUMER: Paralellik vardır; global olarak kapatmak yerine sorumlu plan ve iş dağılımı incelenmelidir.
- RESOURCE_SEMAPHORE: Sorgular memory grant bekliyordur. Hatalı tahminler, spill ve eşzamanlılık kontrol edilmelidir.
Sinyali sorguyla ilişkilendirin
Instance wait değerleri arama alanını daraltır. Query Store, canlı DMV kayıtları ve execution plan hangi sorguların katkıda bulunduğunu gösterir. Aynı zaman aralığında CPU, dosya gecikmesi, memory grant, blocking ve deployment olaylarını karşılaştırın.
SELECT DB_NAME(vfs.database_id) AS database_name,
mf.physical_name, vfs.num_of_reads,
vfs.io_stall_read_ms, vfs.num_of_writes,
vfs.io_stall_write_ms
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS vfs
JOIN sys.master_files AS mf
ON mf.database_id = vfs.database_id
AND mf.file_id = vfs.file_id;
Tekrarlanabilir inceleme akışı
- Kullanıcının gördüğü belirtiyi ve zaman aralığını tanımlayın.
- Dokümante edilmiş background wait türlerini ayırarak delta değerlerini karşılaştırın.
- Yalnızca en büyük sayıya değil baskın kaynak kategorisine bakın.
- Bu sinyali açıklayabilecek sorgu, session veya dosyayı bulun.
- Tek bir gerekçeli değişiklik yapıp aynı aralığı yeniden ölçün.
Wait statistics bir pusuladır: araştırma alanını daraltır fakat kanıtın yerini tutmaz.