MSSQL Server’da SQLTRACEBUFFER Bekleme Tipi

SQL Server’da SQLTRACE_BUFFER bekleme tipi, sistemde çalışan bir SQL Trace veya SQL Profiler oturumunun, topladığı verileri diske veya istemciye yazarken yaşadığı gecikmeyi ifade eder.

Basit bir ifadeyle: SQL Server, takip edilen olayları (events) bir bellek tamponuna (buffer) yazar. Bu tampon dolduğunda ve veriler hedefe (bir .trc dosyasına veya Profiler ekranına) boşaltılamadığında, SQL Server bu işlemi bekletir ve karşınıza bu bekleme tipi çıkar.

Bu bekleme tipinin en yaygın nedenleri şunlardır:

  • Aktif SQL Profiler Kullanımı: Profiler arayüzü üzerinden canlı izleme yapmak çok maliyetlidir. Profiler, gelen veriyi ekrana basmakta gecikirse SQL Server’ı bekletir.
  • Yavaş Disk Yazma Hızı: Eğer trace verileri yavaş bir diske yazılıyorsa, tamponlar (buffers) boşaltılamaz ve kuyruk oluşur.
  • Çok Fazla Olayı Takip Etmek: “Bütün Batch Completed ve Statement Completed olaylarını yakala” gibi çok yoğun bir filtreleme yaptıysanız, sistem saniyede binlerce satır veri üretir.
  • Varsayılan Trace (Default Trace): SQL Server’ın arka planda çalışan kendi trace mekanizması bazen yoğun I/O altında bu beklemeyi tetikleyebilir.

Eğer bu bekleme tipi sisteminizde ciddi bir performans kaybına neden oluyorsa şu adımları izleyin:

A. SQL Profiler’ı Kapatın

Profiler, üretim (production) ortamları için “tehlikeli” bir araçtır. Canlı bir sistemde asla Profiler arayüzünü açık bırakmayın.

  • Profiler yerine Server-Side Trace (T-SQL scripti ile başlatılan) veya çok daha modern olan Extended Events (XEvents) kullanın.

B. Extended Events’e Geçiş Yapın

SQLTRACE teknolojisi artık eski (deprecated) kabul ediliyor. Extended Events (XEvents), çok daha düşük CPU ve bellek maliyetiyle çalışır.

  • XEvents, verileri “asenkron” olarak işleyebilir, bu da ana sorgu performansını etkilemeden izleme yapmanıza olanak tanır.

C. İzleme Filtrelerini Daraltın

Her şeyi izlemek yerine sadece spesifik bir veritabanını, kullanıcıyı veya belirli bir sürenin (örneğin 5 saniye) üzerindeki sorguları takip edin.

  • Filtre Örneği: Sadece Duration > 5000 (5 saniyeden uzun sürenler) olanları yakalayın.

D. Default Trace Kontrolü

Varsayılan trace bazen disk darboğazı olan sistemlerde sorun çıkarabilir. Şu komutla mevcut trace oturumlarını görebilirsiniz:

SELECT * FROM sys.traces;

Varsayılan trace dışında (traceid = 1) bir şey görüyorsan, sistemde bir uygulama veya DBA özel bir trace başlatmış olabilir.

Özet

DurumRisk SeviyesiÖnerilen Aksiyon
Profiler açıkken görülmesiYüksekProfiler’ı hemen kapatın, Server-Side Trace’e geçin.
Düşük seviyeli sürekli beklemeDüşükDefault Trace çalışıyor olabilir, disk hızını kontrol edin.
Yüksek I/O yükü ile birleşmesiOrtaTrace dosyasının yazıldığı diski ayırın veya hızı artırın.

Modern SQL Server sürümlerinde (2012 ve sonrası) artık her türlü izleme işi için Extended Events kullanmak en iyi pratiktir (Best Practice).

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

“Mutlu olanlar ise cennettedirler.” (Hud, 11/108)

Author: Yunus YÜCEL

Bir yanıt yazın

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