CPU çekirdek sayısı karşısında CPU çekirdek sayısı - daha yüksek GHz veya SQL Server için daha fazla çekirdek?


30

VMware içindeki sanal bir SQL Server 2016 düğüm kümesi için bir dizi fiziksel sunucu sağlamaya başlıyoruz. Enterprise Edition lisanslarını kullanacağız.

6 düğüm kurmayı planlıyoruz, ancak CPU sunucu sayısı ve CPU çekirdek sayısı ile ilgili fiziksel sunucuları sağlamada ideal yolun ne olduğuna dair bir tartışma var.

Bunun büyük ölçüde işlem hacmine ve diğer yazılıma özel faktörler arasında depolanan veritabanı sayısına bağlı olduğunu biliyorum, ancak tavsiye edilen genel bir kural var mı?

Örneğin, çift çekirdekli, 16 çekirdekli, 2,6 GHz'lik bir fiziksel sunucu (16 çekirdekli), çift çekirdekli, 16 çekirdekli 2,6 GHz'lik bir sunucuya (32 çekirdekli) göre daha mı tercih edilir?

Bu konuya daha fazla değinen beyaz bir yazıyla karşılaşan var mı?


Endişeniz, soyut veya lisanslamadaki performans ve maliyet etkinliği nedir?
Evan Carroll

Yanıtlar:


40

Genel kural, çekirdek sayısını olabildiğince düşük, işlemci hızını mümkün olduğunca yüksek tutmasıdır. Bunun üzerindeki lisans matematiği, Pahalı Baskı için çekirdek başına ~ 7.500 ABD Doları olduğunu gösteriyor.

Doğru donanımı satın almak, lisans maliyetlerini düşürerek kendisi için ödeme yapabilir. Bkz . Glenn Berry'nin SQL Server İşlemcisi Seçimi . SQL Server için bir işlemcinin nasıl seçileceği konusunda harika bir kaynak.

SQL Server'ın çekirdek başına lisans yapısını göz önünde bulundurduğunuzda, iş yükü türünden bağımsız olarak, OLTP veya analitik olsun, her zaman mümkün olan en yüksek işlemci hızıyla devam etmeniz mantıklıdır. Mümkün olan en hızlı çekirdek hıza sahip olmak hiçbir zaman sorun olmayacak. Çekirdek sayısını gerektiği gibi artırın, ancak bunu çekirdek hızını azaltarak yapmayın.

Başka bir deyişle, 16 x 2.2Ghz işlemcilerin 8 x 4.5Ghz işlemcilerle aynı olduğunu düşünmeyin. 2.2Ghz işlemcilerin 4.5Ghz işlemciler üzerinden kullanılmasının maliyet tasarrufunun maksimum 10.000 ABD Doları olması muhtemeldir (tipik bir Xeon tabanlı iki işlemci makinesi için). SQL Server Enterprise Edition ile 8 çekirdekten 16 çekirdeğe atlamanın lisans ücretlerinde 60.000 ABD dolarının üzerinde bir maliyeti olması muhtemeldir. Başka bir deyişle, donanım maliyetlerinde 10,000 ABD doları tasarruf sağlayabilirsiniz, ancak fazladan 50,000 ABD Doları lisans alırsınız.

Çok fazla paralel işlem kasına ihtiyacınız olduğuna karar verirseniz ve elinizdeki görev için 32 çekirdeğe ihtiyacınız olduğuna karar verirseniz, en hızlı çekirdeklerle devam etmek, işlem süresinin azalmasıyla temettü ödeyecektir. Bunun için kimse seni suçlamaz.

Bunları söyledikten sonra, seçim bir CPU veya birden fazla CPU ise, her zaman birden fazla işlem yapın . SQL Server'ı (veya herhangi bir DBMS'yi) tek bir CPU'da çalıştırmak, eşzamanlı işlemler yeteneği oldukça sınırlı olduğundan her türlü soruna neden olabilir.


11

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 :

FINDIK

Ç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.

FINDIK

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

FINDIK

EXEC sp_BlitzFirst @SinceStartup = 1

FINDIK

Max Worker Konularını artıramaz mıyım?

MWT'nin arttırılması, SOS_SCHEDULER_YIELDbekleyenlerin 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!


2

Topluluk wiki cevabı :

Uzun ve kısa olanı: SQL Server için çoğu iş yükü, seri bir işlem olduğu için daha yüksek saat hızlarından yararlanan OLTP'dir.

Özellikle büyük ölçüde paralel bir sistem için tasarım yapmadığınız sürece, saat hızları her zaman kazanacaktır. Kenar davaları var, ancak zamanın% 95'i bu. Daha az maliyetli olması da güzel bir şey.


-3

Bu sorunun cevabı aşağıya iner: kullanım durumunuza göre değişir.

  • Aynı anda birden fazla küçük istek mi, birkaç büyük istek mi işliyorsunuz?
  • Çalıştırdığınız program çok çekirdekli sistemler için bile optimize edilmiş mi?

Örneğin, dört çekirdekli bir bilgisayarım var, ancak ESP8266 derleyicisi işlemcimin yalnızca% 25'ini kullanıyor çünkü yalnızca bir çekirdeği kullanmak için tasarlandı. Eğer 1 hızlı çekirdeğim olsaydı, bu daha uygun olurdu.


6
Merhaba ve dba.stackexchange.com'a hoş geldiniz ! Cevabınız çok genel bir durum için doğrudur, ancak OP'nin sorduğu SQL veya veritabanı durumlarına odaklanmamaktadır. Bu konuda daha derine inerek geliştirmeyi deneyin! :)
xDaizu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.