SQL Server verwendet nicht alle CPU-Kerne / Threads

15

Nach dem Upgrade der SQL Server-Hardware haben wir im Windows Task-Manager festgestellt, dass die SQL-Instanz nur die Hälfte der verfügbaren Threads verwendet:

Taskmanager.

Der Server verfügt über folgende Hard- und Software:

  • Windows 2008 R2 Enterprise 64-Bit-SP1
  • Intel Xeon E7-4870 - 4 Prozessoren (40 Kerne, 80 Threads)
  • Microsoft SQL Server 2012 Enterprise Edition (64-Bit)

Running select cpu_count from sys.dm_os_sys_infogibt 40 zurück.

Das Betriebssystem sieht alle 80 Threads.

Warum wird nur die Hälfte der Rechenleistung des Servers verbraucht?

Wir haben dieselbe Hardware und Software auf zwei Servern und beide weisen dasselbe Verhalten auf.

Jon Seigel
quelle

Antworten:

23

Im SQL Server-Fehlerprotokoll sollte angegeben werden, warum. Ich fand dies auf einem Kundensystem (wirklich nur die Nachricht für Google-Saft einfügen):

SQL Server hat 4 Sockets mit 8 Kernen pro Socket und 16 logischen Prozessoren pro Socket erkannt, insgesamt 64 logische Prozessoren. Verwendung von 40 logischen Prozessoren basierend auf der SQL Server-Lizenzierung. Dies ist eine Informationsnachricht. Es ist keine Benutzeraktion erforderlich.

Ich habe die wahrscheinliche Erklärung von hier :

Für Kunden mit Software Assurance für vorhandene SQL EE Server-Lizenzen (oder für den Zugriff auf diese Lizenzen im Rahmen ihrer aktuellen Unternehmensvereinbarungen während der Laufzeit) wurde eine Version von Enterprise Edition erstellt, mit der sie ein Upgrade auf SQL Server 2012 durchführen können. Diese Version unterliegt technischen Einschränkungen, die eine Instanz auf beschränken mit nur 20 Prozessorkernen (40 CPU-Threads mit Hyperthreading).

Zusammenfassung: Im Fehlerprotokoll wird die Edition als entweder Enterprise Editionoder gemeldet Enterprise Edition: Core-based Licensing. In diesem Fall benötigen Sie, wie im Fall des oben genannten Kundensystems, eine Core-basierte Lizenz, um alle verfügbaren Kerne nutzen zu können.

Wenn dies nicht der Fall ist und Sie bereits für alle Kerne lizenziert sind, überprüfen Sie Ihre Affinitätsmaskeneinstellungen, insbesondere, wenn sie festgelegt wurden und die zugrunde liegende Hardware aktualisiert wurde.

Jon Seigel
quelle
Wir hatten ein ähnliches Problem. Wir bauen eine VM mit 1 Sockel und 32 Kernen. SQL würde nur 8 CPUs erkennen. Wir haben es auf 8 Sockel und 4 Kerne umgestellt, das Problem ist behoben. Wir haben Enterprise Editon SQL 2008R2 unter Windows 2008R2 ausgeführt.
user3799984
Ich hatte das gleiche Problem mit einer Standardversion. Wir hatten 8 Steckdosen benutzt und es würde den Rest nicht benutzen. Alles, was wir tun mussten, ist die VM zu ändern und 4 Sockets mit 2 Kernen zu konfigurieren.
Nicolas de Fontenay
7

Schauen Sie im ERRORLOG nach, wann SQL Server zum ersten Mal gestartet wurde. Hier erfahren Sie, wie viele CPUs verwendet werden und warum. Wenn Sie die ERRORLOG-Datei irgendwo posten können, ist dies hilfreich, um zu sehen, was los ist.

mrdenny
quelle
3

Ich habe dies in einem anderen Beitrag von Ajmer Dhariwal gesehen:

Selbst wenn Sie die Enterprise Edition verwenden, ist der Server auf 20 physische Kerne pro Instanz beschränkt, wenn das angewendete Lizenzmodell auf Server + Client Access License (CAL) basiert

Dom
quelle