SQL Server’da FILESTREAM bekleme tipi, veritabanı motorunun yapılandırılmamış verileri (resim, video, PDF vb.) dosya sistemi üzerinde yönetirken yaşadığı gecikmeleri ifade eder.
FILESTREAM teknolojisi, SQL Server’ın veriyi hem SQL hiyerarşisinde tutmasına hem de fiziksel olarak NTFS veya ReFS dosya sisteminde depolamasına olanak tanır. Bu bekleme tipi, SQL Server ile Windows dosya sistemi arasındaki bu köprüde bir tıkanıklık olduğunda karşımıza çıkar.
Bu bekleme tipi genellikle sistemin disk hızıyla veya Windows’un dosya işleme mekanizmasıyla ilgili şu durumlarda artış gösterir:
- Yüksek Dosya Trafiği: Aynı anda çok fazla BLOB (Binary Large Object) verisinin okunması veya yazılması.
- Antivirüs Taramaları: Antivirüs yazılımlarının FILESTREAM klasörlerini taramaya çalışması, her okuma/yazma işleminde gecikmeye (latency) neden olur.
- Windows Dosya Sistemi Sınırları: NTFS dosya sisteminin çok sayıda küçük dosyayı yönetmekte zorlanması (klasör başına binlerce dosya olması).
- Yavaş Disk Alt Yapısı: FILESTREAM verilerinin bulunduğu diskin IOPS (saniyedeki işlem sayısı) kapasitesinin dolması.
- Garbage Collection (Çöp Toplama) Süreci: SQL Server’ın silinen FILESTREAM dosyalarını fiziksel olarak diskten temizleme işlemi sırasında oluşan yük.
Eğer FILESTREAM beklemeleri sisteminizde darboğaz yaratıyorsa, şu optimizasyonları yapmanız gerekir:
A. Antivirüs İstisnalarını Kontrol Edin
FILESTREAM performans katili genellikle antivirüslerdir.
- FILESTREAM dosyalarının bulunduğu klasörü ve SQL Server’ın .mdf / .ldf dosyalarını antivirüs tarama listesinden kesinlikle çıkarın (Exclusion).
B. Disk Yapılandırmasını İyileştirin
- Ayrı Disk Kullanımı: FILESTREAM verilerini mümkünse sistem dosyalarından ve veritabanı log dosyalarından farklı bir fiziksel disk grubuna taşıyın.
- RAID Yapısı: FILESTREAM verileri yoğun okuma/yazma gerektirdiği için yüksek performanslı RAID (örn. RAID 10) yapılarını tercih edin.
C. NTFS Ayarları (64KB Cluster Size)
FILESTREAM verileri genellikle büyük dosyalardır.
- FILESTREAM verilerinin tutulduğu diski biçimlendirirken “Allocation Unit Size” değerini 64KB olarak ayarlayın. Bu, büyük dosya transferlerinde disk verimliliğini artırır.
D. 8.3 Dosya Adı Oluşturmayı Kapatın
Eski Windows sistemlerinden kalan “kısa dosya adı” (8.3 naming convention) desteği, her dosya oluşturulmasında ek yük getirir.
- FILESTREAM sürücüsünde bu özelliği kapatmak performans artışı sağlayabilir.
E. Küçük Dosya Tuzağına Düşmeyin
Eğer dosyalarınızın çoğu 1MB’dan küçükse, FILESTREAM kullanmak aslında performansı düşürebilir (dosya sistemi overhead’i nedeniyle). Bu tip küçük veriler için veriyi doğrudan VARBINARY(MAX) olarak tabloda tutmak daha hızlıdır.
Özetle
| Belirti | Olası Neden | Aksiyon |
| Anlık takılmalar | Antivirüs taraması | Klasör istisnalarını tanımlayın. |
| Yavaş okuma/yazma | Disk I/O sınırı | Diskleri SSD/NVMe ile güncelleyin veya RAID yapısını değiştirin. |
| Sistem genelinde yavaşlık | Yetersiz RAM | Windows’un dosya önbelleği (System Cache) için yeterli RAM bırakın. |
| Silme işlemlerinde yavaşlık | Garbage Collection yükü | Silme işlemlerini büyük batchler yerine küçük parçalarla yapın. |
FILESTREAM verileri SQL Server’ın Buffer Pool‘unu (bellek havuzunu) kullanmaz. Bu veriler doğrudan Windows’un System Cache yapısını kullanır. Bu nedenle, SQL Server’ın Max Server Memory ayarını, işletim sistemine dosya önbelleği için yeterli yer (toplam RAM’in %10-15’i gibi) kalacak şekilde yapılandırmalısınız.
Başka makalede görüşmek dileğiyle..
İsraf etmeyin. İsra-26
