SQL Server’da RESOURCE_SEMAPHORE_SMALL_QUERY, küçük bellek ihtiyacı olan sorguların, kendileri için ayrılan özel bellek havuzundan pay alabilmek için sıraya girdiği durumlarda görülür.
SQL Server, sorguları bellek ihtiyacına göre iki ana gruba ayırır: Küçük Sorgular (Small Queries) ve Büyük Sorgular (Regular Queries). Bu ayrımın amacı, devasa rapor sorgularının basit ve hızlı SELECT işlemlerini engellemesini önlemektir.
Sisteminizde RESOURCE_SEMAPHORE_SMALL_QUERY beklemesinin artması, “hızlıca bitmesi gereken” çok sayıda küçük sorgunun bir tıkanıklığa takıldığını gösterir. Temel nedenleri şunlardır:
- Aşırı Eşzamanlılık (Concurrency): Sisteme aynı anda saniyede binlerce küçük sorgu geliyorsa, “Küçük Sorgu Havuzu”ndaki limitler aşılabilir.
- Bellek Baskısı (Memory Pressure): Sunucu genelinde RAM yetersizse, SQL Server küçük sorgulara ayırdığı havuzu daraltır ve sıralar uzar.
- Büyük Sorguların Kaynakları Tüketmesi: Her ne kadar havuzlar ayrı olsa da, sistem genelinde ciddi bir “Query Grant” (Sorgu Belleği) sıkıntısı varsa, küçük sorgular da bu genel yavaşlıktan etkilenir.
- Hatalı İstatistikler: SQL Server bir sorgunun çok az bellek tüketeceğini (küçük sorgu olduğunu) tahmin edebilir, ancak sorgu çalışırken bu tahmin hatalı çıkarsa işlem uzar ve havuzdaki yerini boşaltmaz.
Bu bekleme tipi RESOURCE_SEMAPHORE bekleme tipi ile karıştırılmamalıdır:
| Bekleme Tipi | Etkilenen Sorgular | Sorun |
| RESOURCE_SEMAPHORE | Büyük ve ağır sorgular. | Karmaşık JOIN veya devasa SORT/HASH işlemleri için RAM kalmamıştır. |
| RESOURCE_SEMAPHORE_SMALL_QUERY | Küçük ve hızlı sorgular. | Bellek tahsisat kuyruğunda aşırı yoğunluk veya genel RAM darlığı vardır. |
Eğer bu bekleme tipi sisteminizde yoğunsa şu adımları izleyin:
A. Genel Bellek Durumunu Kontrol Edin
Sistemin ne kadar boş belleği (Available Memory) kaldığına bakın. Eğer SQL Server dışındaki uygulamalar RAM’i tüketiyorsa, SQL Server havuzlarını küçültür.
- Max server memory ayarının doğru yapıldığından emin olun.
B. Sorgu Planlarını İnceleyin (Plan Cache)
Çok sık çalışan ve “küçük” olarak işaretlenen sorguların gerçekten verimli olup olmadığını kontrol edin. Eksik bir index nedeniyle “küçük” sanılan bir sorgu aslında çok fazla CPU tüketiyor olabilir.
C. Resource Governor Kontrolü
Eğer Resource Governor kullanıyorsanız, belirli bir iş yükü grubu (Workload Group) için bellek limitlerini çok düşük tanımlamış olabilirsiniz. Bu limitleri gözden geçirin.
D. İstatistikleri Güncelleyin
Sorgu iyileştiricinin (Optimizer) bir sorguyu yanlış havuzda (küçük yerine büyük veya tam tersi) çalıştırmasını önlemek için UPDATE STATISTICS komutu ile istatistikleri güncel tutun.
Özetle
| Belirti | Olası Neden | Aksiyon |
| Hızlı sorgular bile bekliyor | Genel bellek yetersizliği | RAM miktarını veya Max Server Memory’i artırın. |
| Sadece yoğun saatlerde görülüyor | Aşırı yüksek eşzamanlı sorgu sayısı | Uygulama tarafında bağlantı havuzunu (Connection Pool) optimize edin. |
| Aynı anda RESOURCE_SEMAPHORE da varsa | Ağır sorgu yükü | Verimsiz ve büyük bellek isteyen sorguları optimize edin (Index ekleyin). |
Başka makalede görüşmek dileğiyle..
Allah’ın mescidlerini, yalnızca Allah’a ve ahiret gününe iman eden, namazı dosdoğru kılan, zekatı veren ve Allah’tan başkasından korkmayanlar onarabilir. İşte, hidayete erenlerden oldukları umulanlar bunlardır. Tevbe Suresi, 18. Ayet
