Teilen über


Serverkonfiguration: Affinitätsmaske

Gilt für: SQL Server

Hinweis

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen ALTER SERVER CONFIGURATION.

Zum Ausführen von Multitasking verschiebt Windows gelegentlich Prozessthreads zwischen verschiedenen Prozessoren. Obwohl dieses Vorgehen hinsichtlich des Betriebssystems effizient ist, kann es die Leistung von SQL Server bei starker Systemauslastung beeinträchtigen, da jeder Prozessorcache wiederholt mit Daten beladen wird. Unter diesen Bedingungen kann das Zuweisen bestimmter Threads zu bestimmten Prozessoren die Leistung verbessern, da das erneute Laden von Prozessoren vermieden wird. Eine solche Zuordnung zwischen einem Thread und einem Prozessor wird als Prozessoraffinität bezeichnet.

SQL Server unterstützt die Prozessoraffinität mit zwei Optionen für Affinitätsmasken: „affinity mask“ (auch CPU-Affinitätsmaske genannt) und „affinity I/O mask“. Weitere Informationen über affinity I/O mask option finden Sie unter Konfigurieren der Affinitäts-E/A-Masken-Serverkonfigurationsoption. Die Unterstützung von CPU- und E/A-Affinität für Server mit 33 bis 64 Prozessoren erfordert, dass Sie auch die Serverkonfigurationsoptionen affinity64 mask und affinity64 I/O mask verwenden.

Hinweis

Affinitätsunterstützung für Server mit 33 bis 64 Prozessoren steht nur auf 64-Bit-Betriebssystemen zur Verfügung.

Mit der Option „affinity mask“ aus früheren SQL Server-Versionen wird die CPU-Affinität dynamisch gesteuert.

In SQL Server kann die Option „affinity mask“ konfiguriert werden, ohne dass ein Neustart der SQL Server-Instanz erforderlich ist. Wenn Sie sp_configure, verwenden, müssen Sie entweder RECONFIGURE oder RECONFIGURE WITH OVERRIDE nach dem Festlegen einer Konfigurationsoption ausführen. Wenn Sie SQL Server Express verwenden, ist ein Neustart erforderlich, falls Sie die Option affinity mask ändern.

Änderungen an den Affinitätsmasken erfolgen dynamisch. Dies ermöglicht das bedarfsgesteuerte Starten und Herunterfahren der CPU-Planer, die Prozessthreads in SQL Server binden. Dies kann der Fall sein, wenn sich Bedingungen auf dem Server ändern. Wenn dem Server z. B. eine neue SQL Server-Instanz hinzugefügt wird, müssen Sie möglicherweise die Option „affinity mask“ anpassen, um die Prozessorlast neu zu verteilen.

Für Änderungen an den Affinitätsbitmasken muss SQL Server einen neuen CPU-Planer aktivieren und den vorhandenen CPU-Planer deaktivieren. Neue Batches können dann im neuen oder alten CPU-Zeitplanungsmodul verarbeitet werden.

Zum Starten eines neuen CPU-Planers erstellt SQL Server einen neuen CPU-Planer und fügt ihn der Liste der Standardplaner hinzu. Das neue Zeitplanungsmodul wird nur für die neuen eingehenden Batches verwendet. Die vorhandenen Batches werden weiterhin mit demselben Zeitplanungsmodul ausgeführt. Die Arbeitsthreads werden nach dem neuen Zeitplanungsmodul migriert, wenn sie freigegeben werden oder wenn neue Arbeitsthreads erstellt werden.

Zum Herunterfahren eines Zeitplanungsmoduls müssen alle Batches im Zeitplanungsmodul ihre Aktivitäten abschließen und beendet werden. Ein heruntergefahrenes Zeitplanungsmodul wird als offline gekennzeichnet, damit kein neuer Batch damit geplant wird.

Unabhängig davon, ob Sie einen neuen Planer hinzufügen oder entfernen, werden die permanenten Systemtasks wie die Sperrüberwachung, die Prüfpunkte, der Systemtaskthread (Verarbeitung von DTC) und die Signalverarbeitung weiterhin im Planer ausgeführt, während der Server in Betrieb ist. Diese permanenten Systemtasks werden nicht dynamisch migriert. Wenn Sie diese Prozessorlast für diese Systemtasks auf die Planer verteilen möchten, muss die SQL Server-Instanz neu gestartet werden. Falls SQL Server versucht, einen Planer für einen permanenten Systemtask herunterzufahren, wird der Task weiterhin im Offlineplaner ausgeführt (keine Migration). Dieser Planer ist an die Prozessoren in der geänderten Affinitätsmaske gebunden und lastet den Prozessor, an den der Planer vor der Änderung gebunden wurde, nicht aus. Zusätzliche Offlineplaner sollten keine signifikanten Auswirkungen auf die Systemlast haben. Wenn dies eintritt, ist ein Neustart des Datenbankservers erforderlich, um diese Tasks für die verfügbaren Planer mit der geänderten Affinitätsmaske umzukonfigurieren.

Legen Sie nicht die affinity mask- und affinity I/O mask-Konfigurationswerte von SQL Server nicht so fest, dass sie dieselben CPUs verwenden. Wenn Sie einen Prozessor für die Workerthreadplanung und die E/A-Verarbeitung in SQL Server binden, kann dies die Leistung beeinträchtigen. Sie sollten daher sicherstellen, dass die Konfigurationswerte nicht auf denselben Prozessor festgelegt sind. Die gleiche Empfehlung gilt für die affinity64 mask und affinity64 I/O mask. Damit sichergestellt ist, dass sich „affinity mask“ und „affinity I/O mask“ nicht überlappen, wird mit dem Befehl RECONFIGURE überprüft, ob sich die normalen CPU- und E/A-Affinitäten gegenseitig ausschließen. Falls dies nicht der Fall ist, wird eine Fehlermeldung an die Clientsitzung und an das SQL Server-Fehlerprotokoll gesendet. Diese Fehlermeldung besagt, dass eine solche Einstellung nicht empfohlen wird.

 Msg 5834, Level 16, State 1, Line 1
 The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration.

Das Ausführen von RECONFIGURE WITH OVERRIDE-Optionen ermöglicht CPU- und E/A-Affinitäten, die sich überlappen und nicht gegenseitig ausschließen.

affinity I/O mask hat direkte Auswirkungen auf die E/-A-Affinitätstasks (z. B. den verzögerten Schreiber und den Protokollschreiber). Falls der verzögerte Schreibtask und der Protokollschreibtask nicht gebunden sind, unterliegen sie denselben Regeln, die für die anderen permanenten Tasks wie die Sperrüberwachung oder die Prüfpunkte definiert sind.

Wenn Sie eine Affinitätsmaske angeben, die versucht, eine nicht vorhandene CPU zuzuordnen, sendet der Befehl RECONFIGURE eine Fehlermeldung an die Clientsitzung und an das SQL Server-Fehlerprotokoll. Die Verwendung der Option RECONFIGURE WITH OVERRIDE hat in diesem Fall keine Auswirkung, und der gleiche Konfigurationsfehler wird wiederum gemeldet.

Sie können SQL Server-Aktivitäten auch von bestimmten Arbeitsauslastungszuweisungen des Windows-Betriebssystems ausschließen. Wird ein Bit, das für einen Prozessor steht, auf 1 festgelegt, wird dieser Prozessor von der SQL Server-Datenbank-Engine für die Threadzuweisung ausgewählt. Wenn Sie affinity mask auf 0 festlegen (Standardeinstellung), legen die Planungsalgorithmen von Microsoft Windows die Threadaffinität fest. Wenn Sie affinity mask auf einen Wert ungleich Null festlegen, legt die SQL Server-Affinität den Wert als Bitmaske aus, die die infrage kommenden Prozessoren angibt.

Durch das Ausschließen der SQL Server-Threads von der Ausführung auf bestimmten Prozessoren kann Microsoft Windows die Verarbeitung von Windows-spezifischen Prozessen durch das System besser auswerten. Beispielsweise könnte der Systemadministrator auf einem Server mit 8 CPUs und zwei SQL Server-Instanzen (Instanz A und B) mithilfe der Option „affinity mask“ die ersten 4 CPUs der Instanz A sowie die nächsten 4 CPUs der Instanz B zuweisen. Wenn Sie mehr als 32 Prozessoren konfigurieren möchten, legen Sie die beiden Optionen „affinity mask“ und „affinity64 mask“ fest. Für affinity mask gelten folgende Werte:

Byte im Maskenformat Anzahl von CPUs
1 Byte Bis zu 8 CPUs
2-Byte Bis zu 16 CPUs
3-Byte Bis zu 24 CPUs
4 Byte Bis zu 32 CPUs

Für einen Computer mit mehr als 32 CPUs konfigurieren Sie eine aus vier Bytes affinity mask bestehende affinity mask für die ersten 32 CPUs und eine aus bis zu 4 Bytes bestehende affinity64 mask für die restlichen CPUs.

Da es sich beim Festlegen der SQL Server-Prozessoraffinität um einen spezialisierten Vorgang handelt, verwenden Sie diesen nur bei Bedarf. In den meisten Fällen kann eine optimale Leistung durch die Affinität von standardmäßigem Microsoft Windows erzielt werden. Berücksichtigen Sie auch die CPU-Anforderungen für andere Anwendungen, wenn Sie die Affinitätsmasken festlegen. Weitere Informationen finden Sie in der Dokumentation zu Ihrem Windows-Betriebssystem.

Hinweis

Sie können den Prozess zum Anzeigen und Analysieren der Auslastung einzelner Prozessoren verwenden.

Wenn Sie die Option „affinity I/O mask“ angeben, müssen Sie sie mit der Konfigurationsoption „affinity mask“ verwenden. Wie bereits erwähnt, sollten Sie jedoch nicht dieselbe CPU sowohl im Schalter affinity mask als auch in der Option affinity I/O mask aktivieren. Die Bits, die jeder CPU entsprechen, sollten einen der folgenden drei Status aufweisen:

  • 0 sowohl in der affinity mask-Option als auch in der affinity I/O mask-Option.
  • 1 in der affinity mask-Option und 0 in der affinity I/O mask-Option.
  • 0 in der affinity mask-Option und 1 in der affinity I/O mask-Option.

Achtung

Konfigurieren Sie nie gleichzeitig die CPU-Affinität im Windows-Betriebssystem und die affinity mask in SQL Server. Diese Einstellungen zielen auf dasselbe Ergebnis. Wenn die Konfigurationen inkonsistent sind, kann dies zu unvorhersehbaren Ergebnissen führen. Die CPU-Affinität in SQL Server sollte am besten mit der Option „sp_configure“ in SQL Server konfiguriert werden.

Beispiele

Hier finden Sie ein Beispiel zum Festlegen der Option „affinity mask“: Wenn die Prozessoren 1, 2 und 5 als verfügbar ausgewählt wurden, indem die Bits 1, 2 und 5 auf 1 und die Bits 0, 3, 4, 6 und 7 auf 0 festgelegt wurden, muss ein hexadezimale Wert von 0x26 (die äquivalente Dezimalzahl 38) verwendet werden. Nummerieren Sie die Bits von rechts nach links.

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'affinity mask', 38;
RECONFIGURE;
GO

Die folgende Tabelle zeigt affinity mask-Werte für ein 8-CPU-System.

Dezimalzahl Binäre Bitmaske Ermöglicht SQL Server-Threads auf Prozessoren
1 00000001 0
3 00000011 0 und 1
7 00000111 0, 1 und 2
15 00001111 0, 1, 2 und 3
31 00011111 0, 1, 2, 3 und 4
63 00111111 0, 1, 2, 3, 4 und 5
127 01111111 0, 1, 2, 3, 4, 5 und 6
255 11111111 0, 1, 2, 3, 4, 5, 6 und 7

Bei der Option affinity mask handelt es sich um eine erweiterte Option. Wenn Sie die Einstellung mithilfe der gespeicherten Systemprozedur sp_configure ändern, können Sie „affinity mask“ nur ändern, wenn show advanced options auf 1 festgelegt ist. Nach Ausführung des Transact-SQL–RECONFIGURE-Befehls wird die neue Einstellung sofort wirksam, ohne dass ein Neustart der SQL Server-Instanz erforderlich ist.

Non-Uniform Memory Access (NUMA)

Wenn eine hardwarebasierte NUMA-Architektur (Non-Uniform Memory Access, nicht einheitlicher Speicherzugriff) verwendet wird und die affinity mask festgelegt ist, wird jeder Planer in einem Knoten an seine eigene CPU gebunden. Wenn die affinity mask nicht festgelegt ist, wird jeder Planer an die CPU-Gruppe innerhalb des NUMA-Knotens gebunden, und ein Planer, der dem NUMA-Knoten N1 zugeordnet ist, kann Vorgänge auf jeder CPU im Knoten planen, jedoch nicht auf CPUs, die einem anderen Knoten zugeordnet sind.

Jeder Vorgang, der auf einem einzelnen NUMA-Knoten ausgeführt wird, kann nur Pufferseiten von diesem Knoten verwenden. Wenn ein Vorgang parallel auf CPUs von mehreren Knoten ausgeführt wird, kann Arbeitsspeicher von jedem beteiligten Knoten verwendet werden.

Lizenzprobleme

Die dynamische Affinität wird durch die CPU-Lizenzierung streng reguliert. In SQL Server sind keine Konfigurationen von affinity mask-Optionen zulässig, die gegen die Lizenzierungsrichtlinien verstoßen.

Startup

Wenn eine angegebene Affinitätsmaske während des Starts von SQL Server oder während des Anfügens einer Datenbank gegen die Lizenzierungsrichtlinien verstößt, führt die Engine-Schicht den Startprozess oder das Anfügen einer Datenbank bzw. den Wiederherstellungsvorgang aus. Anschließend wird der Ausführungswert von „sp_configure“ für die Affinitätsmaske auf Null zurückgesetzt, wodurch eine Fehlermeldung an das SQL Server-Fehlerprotokoll ausgegeben wird.

Neu konfigurieren

Wenn eine angegebene Affinitätsmaske beim Ausführen des Transact-SQL-Befehls RECONFIGURE gegen die Lizenzierungsrichtlinien verstößt, wird eine Fehlermeldung an die Clientsitzung und an das SQL Server-Fehlerprotokoll gesendet. Der Datenbankadministrator muss dann die Affinitätsmaske neu konfigurieren. In diesem Fall wird kein RECONFIGURE WITH OVERRIDE-Befehl akzeptiert.