MSSQL Server’da Non-yielding Scheduler Hatası

Bu makalede mssql server’da dump dosyası üzerinde karşılaşılan bir hata mesajı üzerine yazıldı. Öncelikle Sos Scheduler Yielding bekleme tipinin ne olduğuna kısaca değinmek gerekirse SOS_SCHEDULER_YIELD, SQL Server’ın “Cooperative Scheduling” (işbirlikçi zamanlama) mimarisinin doğal bir sonucudur. Bu bekleme tipi, bir thread’in (iş parçacığı) CPU üzerindeki çalışma süresini doldurduğunda, diğer işlemlere sıra vermek amacıyla CPU’yu gönüllü olarak bırakmasıyla oluşur. Daha detaylı bilgi için SOS SCHEDULER YIELD makalesi okunabilir.

SOS_SCHEDULER_YIELD sistemin “kurallara uyarak” CPU’yu bırakmasıyken; Non-yielding Scheduler, bir işlemin (thread) CPU’yu “işgal etmesi” ve belirlenen süre boyunca (genellikle 70-120 saniye arası) kontrolü SQL Server’a geri vermemesidir.

SQL Server, kendi içinde bir “Watchdog” (bekçi) mekanizmasına sahiptir. Eğer bir thread CPU’yu bırakmazsa, SQL Server tüm sistemin kilitlenmesini önlemek için o anki hafıza dökümünü (Memory Dump) alır ve hatayı loglar. Bu durum genellikle SQL Server’ın “donması” veya yanıt vermemesiyle sonuçlanır.

Non-yielding Scheduler Neden Olur

  • Çok karmaşık bir sorgu, CPU içinde sonsuz döngüye benzer bir mantıksal çıkmaza girmiş olabilir.
  • SQL Server’ın dışındaki bir bileşen (örneğin bir Anti-virüs tarayıcısı, yedekleme yazılımı veya hatalı bir Network Driver’ı), SQL Server’ın CPU kullanmasını fiziksel olarak engelliyor olabilir.
  • Sistemde aşırı RAM ihtiyacı olduğunda, Windows “Paging” (sanal bellek kullanımı) yapmaya çalışırken SQL Server thread’lerini askıda bırakabilir.
  • Nadiren de olsa, çok büyük tablolarda Auto Update Statistics işlemi scheduler’ı kilitleyebilir.
DurumSOS_SCHEDULER_YIELDNon-yielding Scheduler
Karakter“Ben işimi bitirmedim ama sıra başkasının.” (Saygılı)“CPU benimdir, kimseye vermem!” (İsyancı)
SonuçSadece performans yavaşlığı.SQL Server donması ve Dump (çökme) üretimi.
CiddiyetNormal / Optimizasyon gerekir.Kritik / Acil müdahale gerekir.

Bu gibi durumlarda öncelikle hata düştüğü saatte karmaşık bir sorgu olup olmadığı, sorun yaşanan anda sunucu modeline göre management port üzerinden ilgili arayüze(idrac-ilo-ibmc) bağlanıp donanımsal bir sorun olup olmadığına bakılması gerekmektedir. SQL Server’ın en güncel Cumulative Update (CU) paketine sahip olduğundan emin ol. Çoğu Non-yielding hatası güncellemelerle çözülür. Eğer sistemde çok fazla eş zamanlı bağlantı varsa, worker thread sınırına ulaşılmış olabilir.

Boş konuşmalardan kaçının Müminin-3

Author: Yunus YÜCEL

Bir yanıt yazın

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