MSSQL Server’da PREEMPTIVE_OS_CALLS Bekleme Tipi

SQL Server, iş parçacıklarını (threads) yönetmek için Non-Preemptive (işbirlikçi) bir çizelgeleme yapısı olan SQLOS‘u kullanır. Normal şartlarda SQL Server, bir görevin ne kadar süre çalışacağını kendisi kontrol eder.

Ancak, SQL Server işletim sistemine ait bir fonksiyonu (Windows API) çağırmak zorunda kaldığında, kontrolü Windows’a devreder. Windows bu görevi Preemptive (öncelikli) olarak yönetir; yani SQL Server bu işlemin ne zaman biteceğini kontrol edemez, sadece sonucun dönmesini bekler. Bu süreçte kaydedilen bekleme süresi PREEMPTIVE_OS_CALLS olarak adlandırılır.

Bu bekleme tipi oldukça genel bir “çatı” terimdir. Genellikle aşağıdaki senaryolarda tetiklenir:

  • Dosya Sistemi İşlemleri: Veritabanı dosyalarının (mdf, ldf) oluşturulması, genişletilmesi (Auto-grow) veya silinmesi sırasında Windows API’leri çağrılır.
  • Active Directory Sorguları: SQL Server üzerinden yapılan LDAP sorguları veya Windows kimlik doğrulama süreçlerindeki gecikmeler.
  • Extended Stored Procedures: xp_cmdshell, xp_fixeddrives gibi işletim sistemi seviyesinde komut çalıştıran prosedürler.
  • CLR (Common Language Runtime) Kodları: SQL Server içinde koşan özel .NET kodlarının harici kaynaklara erişimi.
  • Log Yazma ve Yedekleme: Disk alt yapısındaki darboğazlar nedeniyle I/O taleplerinin işletim sistemi tarafından yavaş karşılanması.
  • DNS Çözümleme: Bağlantı istekleri sırasında DNS sunucusuna gidip gelme süreleri.

Hangi Durumlarda Görülür?

DurumAçıklama
Linked Server çağrılarıÖzellikle uzak sunucudan veri çekerken
File system işlemleriDosya okuma/yazma (örneğin xp_cmdshell, BULK INSERT, OPENROWSET)
Active Directory istekleriKullanıcı kimlik doğrulaması, grup sorguları
CLR (Common Language Runtime) işlemleri.NET ile yazılmış SQL Server uzantıları
Ağ üzerinden yavaş işlemÖrneğin DFS paylaşımları veya SMB protokolleriyle dosya okuma

Bu bekleme tipini azaltmak için odağımızı SQL dışındaki bileşenlere çevirmeliyiz:

  • Anında Dosya Başlatma (Instant File Initialization): SQL Server’ın veri dosyalarını genişletirken diski sıfırlarla doldurmasını engelleyerek bu beklemeyi ciddi oranda azaltabilirsiniz.
  • Disk Performansı: I/O alt yapısını kontrol edin. Disk gecikmeleri (Latency) Windows API çağrılarının uzamasına neden olur.
  • Ağ ve DNS: Eğer bekleme tipi PREEMPTIVE_OS_LOOKUPNAMES gibi alt kırılımlardaysa, ağ yapılandırmasını ve DNS hızlarını kontrol edin.
  • Antivirüs Ayarları: Antivirüs yazılımının SQL Server veri ve log dosyalarını taramadığından emin olun. Tarama işlemi, her dosya erişiminde SQL’i “beklemeye” alır.

Bu bekleme tipini incelerken sys.dm_os_waiting_tasks ve sys.dm_os_wait_stats DMV’lerini (Dynamic Management Views) kullanarak hangi alt API çağrısının (örneğin GetFileAttributes veya CreateFile) gecikmeye neden olduğunu tespit etmek, asıl sorunu bulmanızı sağlar.

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

Kötülüğe iyilikle karşılık verin.Fussilet-34

Author: Yunus YÜCEL

Bir yanıt yazın

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