Bu bekleme tipi, SQL Server’ın WriteFileGather adlı Windows API fonksiyonunu çağırdığında oluşur.
“Gather” (Topla) ifadesi burada anahtar kelimedir. SQL Server, bellekteki (Buffer Pool) farklı noktalara dağılmış olan veri sayfalarını toplar ve bunları diskteki bitişik bir alana tek bir operasyonla yazmaya çalışır. SQL Server bu talebi işletim sistemine ilettiğinde, kontrolü Windows’a bırakır ve Windows “İşlem bitti!” diyene kadar PREEMPTIVE_OS_WRITEFILEGATHER durumunda bekler.
Bu bekleme tipinin en sık görüldüğü üç ana durum şunlardır:
- Veritabanı Dosyası Genişlemesi (Auto-grow): Veri (.mdf) veya Log (.ldf) dosyaları dolduğunda ve otomatik büyüme tetiklendiğinde, SQL Server yeni alan tahsis etmek için bu API’yi kullanır. Eğer Instant File Initialization (IFI) kapalıysa, SQL Server yeni ayrılan alanı sıfırlarla doldurmak zorundadır, bu da ciddi bir beklemeye yol açar.
- Checkpoint İşlemi: SQL Server, bellekteki “kirli” (değiştirilmiş) sayfaları düzenli aralıklarla diske yazar. Yoğun yazma operasyonlarında checkpoint süreci bu beklemeyi tetikler.
- Log Yazımları ve Yedekleme: Büyük hacimli veri girişleri (Bulk Insert) veya transaction log yedeklemeleri sırasında diske sürekli veri yazılması bu bekleme tipini yükseltir.
Eğer bu bekleme tipi sisteminizde “Top Waits” listesindeyse, disk alt sisteminiz SQL Server’ın hızına yetişemiyor demektir. Çözüm için şu adımları izlemelisiniz:
1. Instant File Initialization (Anında Dosya Başlatma) Etkinleştirin
Bu, en kritik adımdır. SQL Server servis hesabına “Perform Volume Maintenance Tasks” yetkisi vererek, dosya büyüme işlemlerinde diskin sıfırlanma zorunluluğunu ortadan kaldırabilirsiniz. Bu sayede WRITEFILEGATHER süreleri milisaniyelere düşer.
2. Auto-grow Ayarlarını Optimize Edin
Dosyaların “yüzde (%)” bazlı değil, sabit bir boyut (örneğin 1024 MB) bazlı büyümesini sağlayın. Çok sık ve küçük boyutlu büyümeler, diskte parçalanmaya ve sürekli bu beklemenin tetiklenmesine neden olur.
3. Disk Gecikmelerini (Latency) Kontrol Edin
Diskinizin fiziksel hızı yetersiz olabilir. sys.dm_io_virtual_file_stats görünümünü kullanarak dosya bazlı gecikmeleri kontrol edin. Eğer okuma/yazma süreleri 20ms’nin üzerindeyse, SSD/NVMe geçişi veya RAID yapılandırmasının gözden geçirilmesi gerekebilir.
4. Antivirüs İstisnaları
Antivirüs yazılımları, SQL Server bir dosyaya yazmaya çalışırken araya girip dosyayı taramak isteyebilir. .mdf, .ldf ve .ndf dosyalarının tarama dışı bırakıldığından emin olun.
Başka makalede görüşmek dileğiyle..
Emanetlerinizi ve sözlerinizi tutun. Müminun-8
