MSSQL Server’da  RESOURCE_SEMAPHORE Bekleme Tipi

SQL Server’da bir sorgu (özellikle SORT veya HASH JOIN içeren karmaşık sorgular) çalışmadan önce belirli bir miktar bellek rezervasyonu talep eder. Eğer sunucudaki boş bellek miktarı, sorgunun talep ettiği “minimum” bellekten azsa, sorgu çalışmaya başlayamaz ve “Havuzda yer açılmasını bekliyorum” diyerek RESOURCE_SEMAPHORE durumuna geçer.

Bu bekleme tipi neden görülür:

  • Aşırı Büyük Bellek Talepleri: Verimsiz sorguların devasa tabloları belleğe almaya çalışması.
  • Eksik İstatistikler: SQL Server’ın tablodaki veri miktarını yanlış tahmin edip gereğinden çok bellek ayırmaya çalışması.
  • Düşük Max Server Memory: SQL Server’a ayrılan toplam belleğin yetersiz olması.
  • Aynı Anda Çalışan Çok Sayıda “Ağır” Sorgu: Birçok sorgunun aynı anda büyük bellek dilimleri talep etmesi.

Bu bekleme tipini gördüğünüzde yapmanız gereken işlemler:

A. Mevcut Bekleyen Sorguları Tespit Edin

Hangi sorguların belleği rehin aldığını veya hangilerinin sırada beklediğini şu DMV (Dynamic Management View) ile görebilirsiniz:

SELECT 
    session_id, request_time, grant_time, 
    requested_memory_kb / 1024.0 AS Requested_MB,
    granted_memory_kb / 1024.0 AS Granted_MB,
    wait_order, timeout_sec
FROM sys.dm_exec_query_memory_grants;

Eğer grant_time kolonu NULL ise, o sorgu şu an RESOURCE_SEMAPHORE ile bekliyor demektir.

B. Sorgu Optimizasyonu (Kalıcı Çözüm)

Beklemelerin %90’ı kötü yazılmış sorgulardan kaynaklanır:

  • İstatistikleri Güncelleyin: UPDATE STATISTICS komutunu kullanarak SQL Server’ın doğru bellek tahmini yapmasını sağlayın.
  • Index Eksiklerini Giderin: Eğer sorgu bir tabloyu taramak (Scan) yerine Index üzerinden (Seek) okursa, daha az belleğe ihtiyaç duyar.
  • SELECT Kullanımından Kaçının ve sadece ihtiyacınız olan kolonları çekerek bellek yükünü azaltın.

C. Sunucu Ayarlarını Kontrol Edin

  • Max Server Memory: SQL Server’ın işletim sistemini boğmayacak ama kendine de yeterli olacak kadar bellek aldığından emin olun.
  • MAXDOP Ayarı: Çok yüksek paralellik (MAXDOP), sorguların daha fazla bellek talep etmesine neden olabilir.

D. Resource Governor (Gelişmiş Çözüm)

Eğer belirli bir rapor sorgusu tüm sistemi kilitliyorsa, Resource Governor kullanarak bu sorguların kullanabileceği maksimum bellek miktarını sınırlayabilirsiniz. Sayfamızdan ilgili makale okunabilir.

Özetle yapılması gerekenler:

AdımİşlemAmacı
1sys.dm_exec_query_memory_grants kontrol et.Suçlu sorguları bul.
2Eksik İstatistikleri güncelle.Yanlış bellek tahminini düzelt.
3Eksik Index’leri oluştur.Sort ve Join işlemlerini hafiflet.
4Donanımı kontrol et.Eğer her şey optimizeyse, RAM ekleme vaktiniz gelmiş olabilir.

Bu makalede RESOURCE_SEMAPHORE bekleme tipini görmüş olduk. Başka makalede görüşmek dileğiyle..

“Kullarım sana Beni sorarlarsa, bilsinler ki Ben, şüphesiz onlara yakınım. Benden isteyenin, dua ettiğinde duasını kabul ederim. Artık onlar da davetimi kabul edip Bana inansınlar ki doğru yolda yürüyenlerden olsunlar.” Bakara Suresi; 186. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

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