MSSQL Server’da RESOURCE_SEMAPHORE_SMALL_QUERY Bekleme Tipi

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 TipiEtkilenen SorgularSorun
RESOURCE_SEMAPHOREBüyük ve ağır sorgular.Karmaşık JOIN veya devasa SORT/HASH işlemleri için RAM kalmamıştır.
RESOURCE_SEMAPHORE_SMALL_QUERYKüçü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

BelirtiOlası NedenAksiyon
Hızlı sorgular bile bekliyorGenel bellek yetersizliğiRAM miktarını veya Max Server Memory’i artırın.
Sadece yoğun saatlerde görülüyorAşırı yüksek eşzamanlı sorgu sayısıUygulama tarafında bağlantı havuzunu (Connection Pool) optimize edin.
Aynı anda RESOURCE_SEMAPHORE da varsaAğı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

Author: Yunus YÜCEL

Bir yanıt yazın

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