CPU-Takt versus CPU-Kernanzahl - höhere GHz oder mehr Kerne für SQL Server?

30

Wir beginnen, eine Reihe von physischen Servern für einen virtuellen Cluster von SQL Server 2016-Knoten in VMware bereitzustellen. Wir werden Enterprise Edition-Lizenzen verwenden.

Wir planen die Einrichtung von 6 Knoten, aber es gibt eine Debatte darüber, wie die physischen Server im Hinblick auf die CPU-Taktrate und die CPU-Kernanzahl optimal bereitgestellt werden können.

Ich weiß, dass dies unter anderem von dem Transaktionsvolumen und der Anzahl der gespeicherten Datenbanken abhängt. Gibt es jedoch eine allgemeine Faustregel, die empfohlen wird?

Ist beispielsweise ein Dual-8-Core-Server mit 3,2 GHz (16 Kerne) einem Dual-16-Core-Server mit 2,6 GHz (32 Kerne) vorzuziehen?

Hat jemand ein Whitepaper gefunden, das sich eingehender mit dieser Art von Thema befasst?

Pico de Gallo
quelle
Was ist Ihr Anliegen, Leistung in der Zusammenfassung oder Lizenzierung und Kosteneffizienz?
Evan Carroll

Antworten:

40

Die allgemeine Faustregel lautet: Halten Sie die Kernanzahl so niedrig wie möglich und die Prozessorgeschwindigkeit so hoch wie möglich. Die Berechnungen zur Lizenzierung belegen, dass die Expensive Edition ~ 7.500 USD pro Core kostet.

Durch den Kauf der richtigen Hardware können sich die Lizenzkosten amortisieren. Siehe Prozessorauswahl für SQL Server von Glenn Berry. Es ist eine großartige Ressource für die Auswahl eines Prozessors für SQL Server.

Wenn Sie die Pro-Core-Lizenzierungsstruktur von SQL Server berücksichtigen, ist es sinnvoll, unabhängig vom Workload-Typ (OLTP oder Analytics) immer die schnellste verfügbare Prozessorgeschwindigkeit zu wählen. Die schnellstmögliche Kerngeschwindigkeit ist niemals ein Problem. Erhöhen Sie die Kernanzahl nach Bedarf, jedoch niemals durch Verringern der Kerngeschwindigkeit.

Mit anderen Worten, denken Sie nicht daran, dass 16 x 2,2 GHz-Prozessoren mit 8 x 4,5 GHz-Prozessoren identisch sind. Die Kosteneinsparungen bei der Verwendung von 2,2-GHz-Prozessoren gegenüber 4,5-GHz-Prozessoren dürften maximal etwa 10.000 USD betragen (für eine typische Xeon-basierte Zwei-Prozessor-Maschine). Das Springen von 8 auf 16 Kerne mit SQL Server Enterprise Edition kostet wahrscheinlich mehr als 60.000 USD an Lizenzgebühren. Mit anderen Worten, Sie sparen möglicherweise 10.000 US-Dollar an Hardwarekosten, verlieren jedoch zusätzlich 50.000 US-Dollar an Lizenzkosten.

Wenn Sie feststellen, dass Sie viel Parallelverarbeitungs-Muskel benötigen und 32 Kerne für die anstehende Aufgabe benötigen, zahlt sich die Verwendung der schnellsten Kerne bei verkürzter Verarbeitungszeit aus. Niemand wird dir dafür etwas vorwerfen.

Nachdem alles gesagt , dass, wenn die Wahl einer CPU ist oder mehr als eine CPU, gehen immer mit mehr als einer . Das Ausführen von SQL Server (oder eines beliebigen DBMS) auf einer einzelnen CPU kann alle Arten von Problemen verursachen, da die Fähigkeit für gleichzeitige Vorgänge stark eingeschränkt ist.

Max Vernon
quelle
11

Gedrückt halten Gedrückt halten Gedrückt halten

Die Aspekte Leistung und Lizenzierung sind zwar interessant, sie sind jedoch nicht der einzige Aspekt einer zu berücksichtigenden Arbeitslast.

Eine Sache, die sich auf die Prozessorauswahl auswirken kann, sind Worker-Threads.

Arbeiterfäden?

Yeah, Kumpel! Dies sind die Dinge, die Ihr SQL Server verwendet, um Ihre Abfragen auszuführen und alle Hintergrundaufgaben zu erledigen, die erforderlich sind, um die Dinge in Form zu halten.

Wenn Sie von Worker - Threads laufen aus, schlagen Sie Threadpool wartet

THREADPOOL?

THREADPOOL. Dies ist eine der übelsten wartet Sie auf Ihrem Server, zusammen mit haben kann RESOURCE_SEMAPHORE und RESOURCE_SEMAPHORE_QUERY_COMPILE . Aber das sind Wartezeiten, und das ist eine CPU-Frage.

Also zurück zu dem Grund, warum dies Wiggity Wack ist.

So berechnet SQL Server Worker-Threads :

NÜSSE

Beachten Sie, dass das Verdoppeln der Kernanzahl nicht das Verdoppeln der maximalen Arbeitsthreads bewirkt und Sie mit 1 Kern dieselbe Zahl erhalten wie mit 4 Kernen? Die Gleichung lautet:512 + ((logical CPUs - 4) * 16)

Das ist eine Schande, denn wenn die Anzahl der Kerne steigt, sinkt die Taktfrequenz normalerweise auf eine oder zwei Generationen zurück.

NÜSSE

Ein Blick auf eine aktuelle Reihe von Intel-Chips zeigt einen ähnlichen Trend.

Woher weiß ich, wie viele Threads ich brauche?

Dies wird sehr davon abhängen:

  • Anzahl der Nutzer
  • Anzahl paralleler Abfragen
  • Anzahl der seriellen Abfragen
  • Anzahl der Datenbanken und Datensynchronisation (Mirroring, AGs, Backups für Log Shipping)
  • Wenn Sie MAXDOP und CTFP auf den Standardeinstellungen belassen

Wenn Ihnen heute nicht die Zeit ausgeht, geht es Ihnen wahrscheinlich gut.

Aber woher weißt du, ob du es bist?

Es gibt gute Fragen, und es gibt gute Fragen, und ich möchte Ihnen etwas sagen, das ist eine GROSSE FRAGE .

THREADPOOL kann sich als Verbindungsproblem manifestieren , und im Fehlerprotokoll werden möglicherweise Meldungen darüber angezeigt, dass kein Thread erzeugt werden kann .

Sie können die Wartestatistiken Ihres Servers auch mit einem kostenlosen Tool wie sp_Blitz oder sp_BlitzFirst anzeigen (vollständige Offenlegung, ich trage zu diesem Projekt bei).

EXEC sp_Blitz

NÜSSE

EXEC sp_BlitzFirst @SinceStartup = 1

NÜSSE

Kann ich Max Worker Threads nicht einfach erhöhen?

Das Erhöhen der MWT kann zu erhöhten SOS_SCHEDULER_YIELDWartezeiten führen.

Das ist nicht das Ende der Welt, aber denken Sie daran, als würden ein paar schreiende Kinder in die Klasse eines Lehrers aufgenommen.

Plötzlich wird es für jedes Kind schwieriger, Aufmerksamkeit zu bekommen.

Wenn ein Prozess sein 4-ms-Quantum erschöpft , sind möglicherweise mehr Threads vor ihm, die darauf warten, auf die CPU zu gelangen.

Die Leistung könnte sich ähnlich anfühlen.

Wie kann ich weniger Arbeitsthreads verwenden?

Du grausamer [noun] von einem [noun], das sind Arbeiter mit zu unterstützenden Familien! Hypotheken! Träume!

Aber in Ordnung, ich muss das Endergebnis respektieren. Du bist der Boss.

Am einfachsten ist es, Einstellungen wie MAXDOP und Cost Threshold For Parallelism aus den Standardeinstellungen zu ändern.

Wenn Sie Fragen dazu haben, wie Sie diese einstellen können, klicken Sie hier:

Danach wird Ihre Arbeit viel schwieriger. Du musst herausfinden, was all diese Threads verbraucht. Sie können dies manchmal tun, indem Sie sich Ihre Wartestatistiken ansehen.

Insbesondere, wenn Sie hohe Wartezeiten für Parallelität ( CXPACKET) UND hohe Wartezeiten für Sperren ( LCK_) haben, stoßen Sie möglicherweise auf lange Blockierungsketten mit parallelen Abfragen.

Weißt du was stinkt? Während all diese parallelen Abfragen darauf warten, ihre Sperren zu erhalten, geben sie ihre zugewiesenen Threads nicht zurück.

Sie können fast hören, dass die vier Kern-VMs, die Ihr Administrator Ihnen versichert hat, mehr als genug für jede Arbeitsbelastung sind, die nach Luft schnappt, nicht wahr?

Leider ist die Art der Abfrage- und Indexoptimierung, die Sie durchführen müssen, um dieses Problem zu lösen, nicht Gegenstand der Frage.

Hoffe das hilft!

Erik Darling
quelle
2

Community Wiki Antwort :

Das lange und das kurze daran ist: Die meisten Workloads für SQL Server sind OLTP-Workloads, die von höheren Taktraten profitieren, da es sich um eine serielle Operation handelt.

Wenn Sie nicht speziell auf ein massiv paralleles System ausgelegt sind, werden die Taktraten immer die Oberhand gewinnen. Randfälle existieren, aber das ist die 95% der Zeit Antwort. Die Tatsache, dass es weniger kostet, ist auch eine schöne Sache.

user126897
quelle
-3

Die Antwort lautet: Es hängt von Ihrem Anwendungsfall ab.

  • Verarbeiten Sie mehrere kleine Anfragen gleichzeitig oder einige große Anfragen?
  • Ist das von Ihnen ausgeführte Programm überhaupt für Multi-Core optimiert?

Ich habe zum Beispiel einen Quad-Core-Computer, aber der ESP8266-Compiler belegt nur 25% meiner CPU, da er nur für die Verwendung eines Kerns ausgelegt ist. Wenn ich 1 schnellen Kern hätte, dann wäre das optimaler.

Ahmad Rashed
quelle
6
Hallo und willkommen auf dba.stackexchange.com ! Ihre Antwort gilt für einen sehr allgemeinen Fall, aber sie konzentriert sich nicht auf die SQL- oder Datenbankfälle, nach denen das OP fragt. Versuchen Sie es zu verbessern, indem Sie in dieser Angelegenheit tiefer gehen! :)
xDaizu