MSSQL Server’da MEMORY_ALLOCATION_EXT Bekleme Tipi

SQL Server’da MEMORY_ALLOCATION_EXT bekleme tipi, motorun işletim sisteminden (Windows) veya SQL Server’ın kendi bellek yöneticisinden bellek tahsis etmek için beklediği genel bir durumdur.

Bu bekleme tipi, RESOURCE_SEMAPHORE gibi doğrudan sorgu bazlı bir kısıtlamadan ziyade, SQL Server’ın iç bileşenlerinin (örneğin nesne oluşturma, bağlantı yönetimi veya iç yapılar) bellek taleplerinin karşılanması sırasındaki gecikmeleri temsil eder.

Bu bekleme tipi, SQL Server’ın “External Allocation” (Dış Tahsis) dediğimiz, genellikle küçük boyutlu ama çok sayıda olan bellek taleplerini ifade eder. SQL Server bu belleği rezerve etmeye çalışırken bir gecikme yaşarsa bu sayaç artar.

Neden Görülür?

  • Yoğun Bağlantı Trafiği: Çok kısa sürede binlerce oturumun açılıp kapanması (Login/Logout fırtınası).
  • Aşırı Sayıda Nesne Oluşturma: Geçici tabloların (#temp_table) veya değişkenlerin (@table) saniyede binlerce kez oluşturulup yok edilmesi.
  • İşletim Sistemi Seviyesinde Bellek Baskısı: Windows’un SQL Server’a bellek vermekte nazlanması veya sayfalama (Paging) yapması.
  • Büyük Sayıda Plan Cache Girdisi: Çok fazla ad-hoc (parametresiz) sorgunun plan cache’i şişirmesi ve SQL’in bu yapıyı yönetmek için sürekli yeni bellek alanları açması.

2. Bu Durum Görüldüğünde Ne Yapılmalıdır:

MEMORY_ALLOCATION_EXT genellikle tek başına bir performans darboğazı yaratmaz; ancak yüksek değerlere ulaşıyorsa sistemde bir “bellek yönetimi karmaşası” var demektir.

A. İşletim Sistemi ve Sürücü Kontrolü

  • Lock Pages in Memory (LPIM): SQL Server servis hesabına “Lock Pages in Memory” yetkisinin verildiğinden emin olun. Bu, Windows’un SQL Server’ın belleğini diske yazmasını (paging) engeller ve tahsis işlemlerini hızlandırır.
  • Güç Planı: Windows Güç Planı’nın “Yüksek Performans” (High Performance) modunda olduğundan emin olun. “Dengeli” modda işlemci hız değişimleri bellek tahsis hızını etkileyebilir.

B. Uygulama ve Sorgu Davranışını İnceleyin

  • TempDB Kullanımını Optimize Edin: Eğer sorun geçici nesne oluşturma kaynaklıysa, TempDB üzerindeki baskıyı azaltın veya tablo değişkenleri yerine daha verimli yapılar kullanın.
  • Bağlantı Havuzu (Connection Pooling): Uygulamanın her işlem için yeni bir bağlantı açıp kapatmadığından, bağlantı havuzunu (Pooling) doğru kullandığından emin olun.
  • Ad-Hoc Sorguları Azaltın: Daha önce bahsettiğimiz optimize for ad hoc workloads ayarını kontrol edin.

C. Donanım ve Yapılandırma

  • Max Server Memory: SQL Server’ın kendine ayırdığı belleğin, fiziksel RAM’in %80-%90’ını geçmediğinden emin olun. İşletim sistemine (OS) yeterli alan kalmazsa, OS bellek tahsis taleplerine geç yanıt verir.

Özet

DurumOlası NedenÇözüm
Düşük Süreli BeklemeNormal çalışma rutini.Müdahale gerektirmez.
Yüksek Süreli Bekleme + Yüksek CPUÇok fazla login/logout veya ad-hoc sorgu.Connection Pooling ve Parametrizasyon.
Yüksek Süreli Bekleme + Düşük Performansİşletim sistemi sayfalama yapıyor.Lock Pages in Memory kontrolü ve RAM artırımı.

MEMORY_ALLOCATION_EXT ile birlikte SOS_SCHEDULER_YIELD veya PAGELATCH_UP gibi beklemeler de görüyor musunuz? Bu, sorunun kaynağını (CPU mu yoksa TempDB mi) netleştirmemize yardımcı olur.

Başka makalede görüşmek dileğiyle..

“Onlar inanmışlar, kalpleri Allah’ı anmakla huzura kavuşmuştur. Dikkat edin, kalpler ancak Allah’ı anmakla huzura kavuşur. “ Ra’d Suresi; 28. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

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