Beklemede beklemede beklemede
Performans ve lisanslama yönleri ilginç olsa da, dikkate alınacak tek iş yükü onlar değildir.
İşlemci seçimi üzerinde etkili olabilecek bir şey işçi iplikleridir.
İşçi Konuları?
Evet dostum! Bunlar, SQL Server'ınızın sorgularınızı çalıştırmak için kullanacağı şeyler ve şeyleri formda tutmak için yapılması gereken tüm arka plan işlemlerini yapar.
Çalışan iş parçacığı bittiğinde , THREADPOOL bekler
ThreadPool'da?
ThreadPool'da. Bu, RESOURCE_SEMAPHORE ve RESOURCE_SEMAPHORE_QUERY_COMPILE ile birlikte sunucunuzdaki en kötü beklemelerden biri . Fakat bunlar hafıza bekler ve bu bir CPU sorusudur.
Öyleyse neden bu cilveli küfür.
SQL Server, çalışan iş parçacıklarını böyle hesaplar :
Çekirdek sayısının iki katına çıkmasının Max Worker İpliklerini iki katına çıkarmadığına ve 4 çekirdekli ile aynı sayıya sahip olduğunuzu fark ettiniz mi? Denklem:512 + ((logical CPUs - 4) * 16)
Bu utanç verici çünkü çekirdek sayım arttığında saat hızı genellikle bir veya iki kuşaktır.
Herhangi bir Intel yonga hattına göz atmak da benzer bir eğilim gösterecektir.
Kaç konuya ihtiyacım olduğunu nasıl bilebilirim?
Bu çok bağlıdır:
- Kullanıcı sayısı
- Paralel sorgu sayısı
- Seri sorgu sayısı
- Veritabanlarının sayısı ve veri senkronizasyonu (Mirroring, AG'ler, Log Shipping için yedekler)
- MAXDOP ve CTFP'yi varsayılan ayarlarda bırakırsanız,
Bugün onlardan kaçmıyorsanız, muhtemelen sorun değil.
Ama sen olup olmadığını nasıl bildin?
Güzel sorular var ve harika sorular var ve size bir şey söylemem yeterli, bu BÜYÜK BİR SORU .
THREADPOOL bağlantı sorunları olarak ortaya çıkabilir ve hata günlüğünde bir iş parçacığının oluşamaması ile ilgili mesajlar görebilirsiniz .
Ayrıca sp_Blitz veya sp_BlitzFirst gibi ücretsiz bir araç kullanarak sunucunuzun bekleme istatistiklerine bakabilirsiniz (tam açıklama, bu projeye katkıda bulunuyorum).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Max Worker Konularını artıramaz mıyım?
MWT'nin arttırılması, SOS_SCHEDULER_YIELD
bekleyenlerin artmasına neden olabilir .
Bu, dünyanın sonu değil, ama öğretmen sınıfına çığlık atan bir buncha çocuğu eklemek gibi düşünün.
Birdenbire, her çocuğun dikkatini çekmek zorlaşacak.
Bir işlem 4ms kuantumunu tükettiğinde, potansiyel olarak işlemciyi almak için bekleyen daha fazla iş parçacığı olacaktır.
Performans aynı şeyi hissedebilir.
Daha az İşçi Başlığını nasıl kullanabilirim?
Bir isimden zalim [isim], onlar aileleri destekleyecek işçiler! İpotek! Düşler!
Ama tamam, sonuç olarak saygı duymalıyım. Patron sensin.
Başlamak için en kolay yer, varsayılan ayarlardan MAXDOP ve Paralelizm İçin Maliyet Eşiği gibi ayarları değiştirmektir.
Bunları nasıl ayarlayacağınızla ilgili sorularınız varsa buraya gidin:
Ondan sonra işin çok zorlaşıyor. Bütün bu konuları ne kullandığını bulmalısın. Bunu bazen bekleme istatistiklerine bakarak yapabilirsiniz.
Daha spesifik olarak, eğer paralellik ( CXPACKET
) yüksek bekler varsa ve yüksek kilitler ( LCK_
) beklerse, paralel sorguları içeren uzun engelleme zincirleri ile karşılaşıyor olabilirsiniz.
Ne kokuyor biliyor musun? Tüm bu paralel sorgular kilitlerini almayı beklerken tahsis edilen konuları geri vermiyorlar.
Yöneticinizin sizi havaya uçurmak için çalışan herhangi bir iş yükü için fazlasıyla güvence altına aldığından emin olduğu dört çekirdekli sanal makineyi neredeyse duyabiliyorsunuz, ha?
Ne yazık ki, bu tür sorunları çözmek için yapmanız gereken sorgu türü ve dizin ayarlaması, sorunun kapsamı dışındadır.
Bu yardımcı olur umarım!