SQL Server’da DISPATCHER_QUEUE_SEMAPHORE bekleme tipi, genellikle bir “sorun” değil, sistemin boşta (idle) olduğunu gösteren doğal bir durumdur. Tıpkı daha önce incelediğimiz CLR_AUTO_EVENT veya HADR_NOTIFICATION_DEQUEUE gibi, bu da bir “kuyruk bekleyicisi”dir.
SQL Server’ın iç yapısında belirli görevleri (task) dağıtan ve yöneten “Dispatcher” (Dağıtıcı) mekanizmaları bulunur. Bu bekleme tipi, bir Dispatcher iş parçacığının (thread) işlemek üzere yeni bir görev gelmesini beklemesi durumunda ortaya çıkar.
- Dispatcher: Gelen işleri uygun kanallara yönlendiren trafik polisi gibidir.
- Semaphore: Bir kaynağa erişimi kontrol eden sinyal mekanizmasıdır.
- Bekleme Durumu: Dağıtılacak yeni bir paket veya görev yoksa, Dispatcher uyku moduna geçer ve bu bekleme tipi sayaçta artmaya başlar.
SQL Server topluluğunda bu bekleme tipi “Benign Wait” (İyi Huylu Bekleme) olarak sınıflandırılır.
Sistem Boştayken Yükselir: Sunucunuzda hiçbir sorgu çalışmıyorken bile bu değerin arttığını görebilirsiniz. Bu, SQL Server’ın arka plan servislerinin yeni bir emir beklediği anlamına gelir.
Kaynak Tüketmez: Bu bekleme gerçekleşirken CPU veya Disk üzerinde herhangi bir yük oluşmaz. Sadece bir zaman sayacı işlemektedir.
Performans Analizlerinde Filtrelenmelidir: Eğer bir performans raporu (Wait Stats) hazırlıyorsanız, bu tipi sonuçlardan çıkarmanız gerekir; aksi halde gerçek sorunları (örneğin disk yavaşlığı olan PAGEIOLATCH_EX) görmenizi zorlaştırabilir.
Neredeyse hiçbir zaman bu bekleme tipi kendi başına bir darboğazın ana sebebi olmaz. Ancak, eğer sisteminizde tüm worker thread’ler (iş parçacıkları) tükenmişse ve yeni işler dağıtılamıyorsa dolaylı olarak bu süreçte bir aksama görülebilir. Fakat bu durumda bile asıl bakmanız gereken yer THREADPOOL beklemesidir.
Gerçek performans sorunlarına odaklanmak için DISPATCHER_QUEUE_SEMAPHORE gibi zararsız beklemeleri elediğimiz şu sorguyu kullanabilirsiniz:
SELECT wait_type,
wait_time_ms / 1000.0 AS Wait_Sec,
waiting_tasks_count
FROM sys.dm_os_wait_stats
WHERE wait_type NOT IN (
'DISPATCHER_QUEUE_SEMAPHORE',
'LAZYWRITER_SLEEP',
'OLD_NETWORK_CLEANUP',
'REQUEST_FOR_DEADLOCK_SEARCH',
'XE_TIMER_EVENT',
'CLR_AUTO_EVENT',
'HADR_NOTIFICATION_DEQUEUE'
)
ORDER BY wait_time_ms DESC;
Bu değerin çok yüksek olması sisteminizin bozuk olduğunu değil, aksine iş beklediğini gösterir. Eğer bir performans sorunu yaşıyorsanız, CXPACKET, SOS_SCHEDULER_YIELD veya LCK_M_… gibi “aktif” bekleme tiplerine odaklanın.
Başka makalede görüşmek dileğiyle..
Alçak gönüllü şekilde yürüyün. Furkan-63
