MSSQL Server’da SLEEP_TASK Bekleme Tipi

SQL Server’da SLEEP_TASK bekleme tipi, adından da anlaşılacağı üzere bir “görev uykusu” durumudur. Ancak bu, SQL Server’ın yorgun olduğu için dinlendiği anlamına gelmez. Aksine, SQL Server’ın arka planda yürütmesi gereken bir işi olduğu, ancak o işi başlatmak için henüz uygun zamanın gelmediği veya bir tetikleyici beklediği anlamına gelir.

T-SQL içinde WAITFOR DELAY ’00:00:10′ gibi komutlar kullanılıyorsa bu değer artar. Bu tür manuel beklemelerin iş mantığındaki gerekliliğini sorgulayın.

Hash Join Spill: Sorgular belleğe sığmayıp diske (TempDB) taştığında (Spill), thread’ler bazen senkronizasyon için uyku moduna geçer. Sorguları ve eksik indeksleri analiz ederek “Sort/Hash Spill” olup olmadığını kontrol edin.

Bu bekleme tipi genellikle “zararsız” kabul edilir ve çoğu zaman SQL Server’ın kendi iç işleyişinin bir parçasıdır.

SLEEP_TASK beklemesini tetikleyen yaygın durumlar şunlardır:

  1. Hashing İşlemleri (Hash Join/Aggregate): Sorgu çalışırken veriler bellekte “hash” tablolarına yerleştirilir. Eğer bu işlem sırasında bir thread (iş parçacığı) işini bitirir ama diğerlerinin bitmesini beklemesi gerekirse, kısa süreliğine SLEEP_TASK durumuna geçer.
  2. Paralel Sorgular (Parallelism): Çok çekirdekli sistemlerde bir sorgu parçalara bölünür. Bazı thread’ler görevini tamamlayıp diğerlerini beklerken “uykuya” dalar.
  3. Arka Plan Görevleri: SQL Server’ın kendi içindeki temizlik görevleri (Ghost Cleanup gibi) veya sistem izleme süreçleri, belirli periyotlarla uyanıp çalışır. Bu periyotlar arasındaki boşlukta SLEEP_TASK sayacı artar.
  4. Uygulama Tarafındaki Beklemeler: Nadiren de olsa, uygulama katmanından gelen bazı özel sinyaller veya Transaction yönetimi sırasındaki duraksamalar bu tipi tetikleyebilir.

SLEEP_TASK, sistemin genel performansını doğrudan baltalayan bir “darboğaz” değildir. Ancak şu iki durumda dikkat etmekte fayda vardır:

  • Toplam bekleme süresinde ilk 3’e giriyorsa: Bu durum, sunucuda çok fazla paralel sorgu döndüğünü veya CPU kaynaklarının verimsiz kullanıldığını (MaxDOP ayarlarının bozuk olması gibi) işaret edebilir.
  • Sistem kilitlenmeleriyle beraber görülüyorsa: Başka bir bekleme tipiyle (örneğin CXPACKET) birlikte çok yüksek değerlere ulaşıyorsa, sorgu planlarınızda bir sorun olabilir.

Şu ana kadar sorduğunuz bekleme tiplerini hızlıca kıyaslayalım:

Bekleme TipiKim Bekliyor?Nedeni
ASYNC_NETWORK_IOSQL ServerUygulama veriyi yavaş okuyor.
RECEIVE_NETWORK_PACKETSQL ServerUygulama yeni komut göndermiyor.
SLEEP_TASKSQL Thread’iİçsel bir işlemin tamamlanmasını bekliyor.

Eğer bu değer çok yüksekse, sunucu genelindeki Max Degree of Parallelism (MaxDOP) ayarını ve Cost Threshold for Parallelism değerini gözden geçirmek en mantıklı ilk adımdır. Genellikle bu ayarlar optimize edildiğinde gereksiz “uyku” süreleri azalır.

Başka makalede görüşmek dileğiyle..

Başarım ancak Allah’ın yardımı iledir. Ben sadece O’na tevekkül ettim ve sadece O’na yöneliyorum.Hûd Suresi-88

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir