SQL Server’da HADR_NOTIFICATION_DEQUEUE bekleme tipi, yüksek erişilebilirlik çözümü olan Always On Availability Groups (AG) ile doğrudan ilişkilidir.
Bu bekleme tipi, sistemin “sorunlu” olduğunu değil, aksine Always On mekanizmasının tetikte beklediğini gösterir. Teknik tabirle bu bir “External” veya “Queue” beklemesidir.
SQL Server’ın Always On mimarisi, replicas arasındaki durum değişikliklerini (örneğin bir veritabanının çevrimiçi olması, rol değişikliği veya bağlantı kopması gibi) yönetmek için bir bildirim kuyruğu kullanır.
HADR_NOTIFICATION_DEQUEUE, bir arka plan iş parçacığının (worker thread) bu kuyruğa yeni bir bildirim düşmesini beklemesidir.
- HADR: High Availability and Disaster Recovery (Always On AG’nin teknik adı).
- NOTIFICATION: Durum değişiklikleri mesajları.
- DEQUEUE: Kuyruktan veri çekme işlemi.
Tıpkı CLR_AUTO_EVENT veya LOGMGR_QUEUE örneklerinde olduğu gibi, bu bekleme tipi genellikle “Benim şu an yapacak bir işim yok, yeni bir bildirim gelene kadar uyuyorum” diyen bir thread’i temsil eder.
- Normal Durum: Eğer sisteminizde Always On yapılandırılmışsa, bu bekleme tipini her zaman listenin üst sıralarında görebilirsiniz. Bu, mekanizmanın çalıştığını ve olayları dinlediğini gösterir.
- Anormal Durum: Eğer bu bekleme tipiyle beraber sistemde kilitlenmeler veya AG senkronizasyonunda ciddi gecikmeler (latency) yaşıyorsanız, ikincil sunucudaki (Secondary) kaynak yetersizliklerine odaklanmak gerekebilir.
Eğer HADR_NOTIFICATION_DEQUEUE beklemesiyle birlikte aşağıdaki durumlardan birini yaşıyorsanız, sorun bu beklemenin kendisi değil, tetiklediği süreçlerdir:
- Hızlı Failover Problemleri: Eğer sunucular arası geçiş (failover) beklenenden yavaş sürüyorsa.
- Yüksek Log Send Queue: Logların ikincil sunucuya gönderilmesinde birikme varsa.
- İkincil Sunucuda Yüksek CPU: İkincil sunucu bildirimleri işleyemeyecek kadar yoğunsa.
Sisteminizdeki Always On kaynaklı beklemelerin toplam ağırlığını şu sorguyla görebilirsiniz:
SELECT wait_type,
wait_time_ms / 1000.0 AS Wait_Sec,
waiting_tasks_count,
(wait_time_ms / NULLIF(waiting_tasks_count, 0)) AS Avg_Wait_Ms
FROM sys.dm_os_wait_stats
WHERE wait_type LIKE 'HADR%'
ORDER BY wait_time_ms DESC;
Özetle:
- Panik Yapmayın: Bu bekleme tipi “iyi huylu” bir beklemedir.
- Filtreleyin: Performans analizleri yaparken (örneğin SQL Sentry veya Redgate gibi araçlarda), gürültüyü azaltmak için bu bekleme tipini raporlarınızdan hariç tutabilirsiniz.
- Asıl Soruna Odaklanın: Eğer Always On performansından şüpheleniyorsanız HADR_LOG_PROGRESS veya HADR_SYNC_COMMIT gibi “gerçek” veri aktarım beklemelerine bakın.
Başka makalede görüşmek dileğiyle…
Gıybet etmeyin. Hucurat-12
