MSSQL Server’da ASYNC_IO_COMPLETION Bekleme Tipi

ASYNC_IO_COMPLETION, SQL Server’da bir işlemin başlattığı asenkron (arka planda yürütülen) I/O talebinin tamamlanmasını beklediği durumlarda ortaya çıkar. Bu bekleme tipi, SQL Server’ın veriyi diske yazmaya veya diskten okumaya çalıştığı ancak işletim sistemi veya donanım katmanından beklediği onayın geciktiği anlamına gelir.

SQL Server genellikle I/O işlemlerini asenkron olarak yapar; yani işi diske havale eder ve başka işlerle ilgilenir. Ancak bu bekleme tipi arttığında, “artık devam edemiyorum, çünkü havale ettiğim işin bitiş sinyalini hala alamadım” demektedir.

Kısacası bu bekleme türü, SQL Server’ın asenkron I/O işlemleri sırasında meydana gelir. SQL Server, veri okuma ve yazma işlemleri için asenkron I/O kullanır ve bu bekleme türü, verilerin okuma/yazma işlemleri sırasında işlemciyi bekletir. SQL Server, asenkron okuma ve yazma işlemleri sırasında CPU’nun meşgul etmesine neden olan beklemelere neden olur. Genellikle disk I/O veya bellekle ilgili darboğazlardan kaynaklanır. Daha hızlı diskler veya daha fazla bellek kullanımı, bu tür beklemeleri azaltabilir. Bu bekleme tipi daha çok IFI açılmadığında, backup beklemelerinde ve linked server beklemelerinde görülür.

Bu bekleme tipi genellikle veritabanı dosyalarıyla ilgili ağır işlemler sırasında görülür:

  • Veritabanı Yedekleme ve Geri Yükleme (Backup/Restore): En yaygın görülme sebebidir. Yedek dosyası oluşturulurken veya okunurken disk hızı yetersiz kalırsa bu bekleme tavan yapar.
  • Database Snapshots: Snapshot oluşturma veya yönetme süreçleri.
  • Veritabanı Dosyalarının Büyümesi (Autogrow): Bir dosya (MDF/LDF) otomatik büyürken (“Zero-initializing” süreci) SQL Server bu işlemin bitmesini bekler.
  • Ağır Yazma İşlemleri (Bulk Load): INSERT INTO … SELECT gibi çok büyük veri yığınlarının taşınması.
  • Database Mail: SQL Server üzerinden büyük ekleri olan e-postaların gönderilmesi (çünkü bu işlem de asenkron I/O kullanır).

Eğer bu bekleme tipi sisteminizde en üst sıralardaysa, şu stratejileri uygulamalısınız:

A. Instant File Initialization (IFI) Aktifleştirin

SQL Server, yeni bir dosya oluştururken veya dosyayı büyütürken diski sıfırlarla doldurur. IFI özelliği açıksa, SQL Server bu “sıfırlama” adımını atlayarak dosyayı anında büyütür.

  • SQL Server servis hesabına Windows üzerinde “Perform Volume Maintenance Tasks” yetkisi verin. Bu, autogrow sırasında oluşan ASYNC_IO_COMPLETION beklemelerini neredeyse sıfıra indirir.

B. Backup Stratejisini Optimize Edin

Yedekleme sırasında bu beklemeyi alıyorsanız:

  • Backup Compression: Veriyi sıkıştırarak diske yazılacak toplam veri boyutunu düşürün.
  • Multiple Backup Files: Yedeği tek bir dosyaya değil, birden fazla dosyaya (stripping) bölün. Bu, I/O yükünü kanallara dağıtır.

C. Donanım ve Disk Yapılandırması

  • Yavaş Diskler: Veritabanı dosyalarınız yavaş (SATA veya düşük IOPS’lu) bir diskte olabilir. SSD veya NVMe geçişi kesin çözümdür.
  • Hatalı Yapılandırma: RAID yapılandırmanızı kontrol edin. Yazma yoğunluklu işler için RAID 10 önerilir.
  • Antivirüs Taraması: Antivirüs yazılımının .mdf, .ldf ve .bak dosyalarını tarıyor olması asenkron işlemleri ciddi şekilde yavaşlatır. Bu uzantıları istisna (exclusion) listesine ekleyin.

D. Database Mail ve Büyük Ekler

Eğer bu bekleme tipi sadece mail gönderilirken oluyorsa, mail eklerinin boyutunu küçültün veya bu işlemi SQL Server dışındaki bir katmana taşıyın.

Bu beklemenin donanımsal olup olmadığını anlamak için dosyalarınızın gecikme (latency) sürelerine bakın:

SELECT 
    DB_NAME(database_id) AS [Veritabanı],
    file_id,
    io_stall_read_ms / num_of_reads AS [Ortalama Okuma Gecikmesi (ms)],
    io_stall_write_ms / num_of_writes AS [Ortalama Yazma Gecikmesi (ms)],
    physical_name
FROM sys.dm_io_virtual_file_stats(NULL, NULL);

Okuma/Yazma gecikmesi 20ms üzerindeyse disk performansınız yetersizdir. 100ms üzeri ciddi bir sorundur.

Aşağıdaki durumlarda ASYNC_IO_COMPLETION karşımıza çıkabilir:

DurumAçıklama
Veri dosyasına yazmaINSERT/UPDATE işlemlerinde
Transaction log’a yazmaÖzellikle tempdb veya log yoğun işlemlerde
Backup/restore işlemleriDisk yavaşsa veya ağ üzerindeyse
Large Object (LOB) veri okuma/yazmaNVARCHAR(MAX), VARBINARY(MAX), IMAGE gibi
CHECKPOINT veya LAZY WRITER sırasındaMemory’deki sayfalar diske yazılırken

ASYNC_IO_COMPLETION, genellikle SQL Server’ın dış dünya (Disk/Network) ile olan iletişiminin yavaşlığından kaynaklanır. Çözüm yolu her zaman sorgu optimizasyonu değildir; çoğu zaman Instant File Initialization‘ı açmak veya yedekleme yöntemini değiştirmek mucizeler yaratır.

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

Yeminlerinizi tutun. Maide-89

Author: Yunus YÜCEL

Bir yanıt yazın

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