affinity mask (Option)

Aktualisiert: 05. Dezember 2005

Für das Multitasking werden in Microsoft Windows 2000 und Windows Server 2003 manchmal Prozessthreads auf verschiedene Prozessoren verteilt. Dies ist zwar aus Sicht des Betriebssystems effizient, aber dadurch kann die Leistung von Microsoft SQL Server bei starker Systemauslastung beeinträchtigt werden, da in jeden Prozessorcache wiederholt Daten geladen werden. Durch das Zuweisen von Prozessoren für bestimmte Threads kann unter diesen Bedingungen die Leistung verbessert werden, weil das erneute Laden von Daten in den Prozessor entfällt und die Threadmigration zwischen Prozessen reduziert wird (wodurch der Kontextwechsel reduziert wird). Diese Zuordnung zwischen einem Thread und einem Prozessor wird als Prozessoraffinität bezeichnet.

SQL Server 2005 unterstützt die Prozessoraffinität durch zwei Affinitätsmaskenoptionen: affinity mask (auch als CPU-Affinitätsmaske bezeichnet) und affinity I/O mask. Weitere Informationen zur Option affinity I/O mask finden Sie unter affinity I/O mask (Option). Für die Unterstützung der CPU- und E/A-Affinität für Server mit 33 bis 64 Prozessoren müssen zusätzlich affinity64 mask (Option) bzw. affinity64 I/O mask (Option) verwendet werden.

ms187104.note(de-de,SQL.90).gifHinweis:
Die Affinitätsunterstützung für Server mit 33 bis 64 Prozessoren ist nur bei 64-Bit-Betriebssystemen verfügbar.

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

In Microsoft SQL Server 2005 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-Zeitplanungsmodule, die Prozessthreads in SQL Server binden. Dies kann der Fall sein, wenn sich Bedingungen auf dem Server ändern. Wenn z. B. dem Server eine neue Instanz von SQL Server hinzugefügt wird, müssen Sie möglicherweise die Option affinity mask anpassen, um die Prozessorauslastung neu zu verteilen.

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

Um ein neues CPU-Zeitplanungsmodul zu starten, erstellt SQL Server ein neues CPU-Zeitplanungsmodul und fügt es der Liste der Standard-Zeitplanungsmodule 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 ein neues Zeitplanungsmodul hinzugefügt oder entfernt wird, werden die permanenten Systemtasks wie z. B. lockmonitor, checkpoint, system task thread (processing DTC) und signal process weiterhin im Zeitplanungsmodul ausgeführt, während der Server betriebsbereit ist. Diese permanenten Systemtasks werden nicht dynamisch migriert. Um die Prozessorauslastung für diese Systemtasks auf die Zeitplanungsmodule zu verteilen, muss die SQL Server-Instanz neu gestartet werden. Falls SQL Server versucht, ein Zeitplanungsmodul für einen permanenten Systemtask herunterzufahren, wird der Task weiterhin im Offline-Zeitplanungsmodul ausgeführt (keine Migration). Dieses Zeitplanungsmodul ist an die Prozessoren in der geänderten Affinitätsmaske gebunden und sollte den Prozessor nicht auslasten, dem es vor der Änderung zugeordnet war. Zusätzliche Offline-Zeitplanungsmodule sollten keine signifikanten Auswirkungen auf die Arbeitsauslastung des Systems haben. Falls dies nicht der Fall ist, muss der Datenbankserver neu gestartet werden, um diese Tasks neu zu konfigurieren.

Die E/A-Affinitätsmaske hat direkte Auswirkungen auf die E/-A-Affinitätstasks (z. B. verzögertes Schreiben und Schreiben von Protokollen). Falls die Tasks für verzögertes Schreiben und das Schreiben von Protokollen nicht an eine Affinität gebunden sind, gelten dieselben Regeln, die für die anderen permanenten Tasks wie z. B. lockmonitor oder checkpoint definiert sind.

Um sicherzustellen, dass die neue Affinitätsmaske gültig ist, 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. Das Ausführen von RECONFIGURE WITH OVERRIDE ermöglicht CPU- und E/A-Affinitäten, die sich nicht gegenseitig ausschließen.

Wenn Sie eine Affinitätsmaske angeben, die eine nicht vorhandene CPU zuzuordnen versucht, 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 Prozessoren fernhalten, denen eine bestimmte Arbeitsauslastung durch das Betriebssystem Windows 2000 oder Windows Server 2003 zugewiesen wurde. Wird ein Bit, das einen Prozessor darstellt, auf 1 festgelegt, wird dieser Prozessor vom SQL Server-Datenbankmodul für die Threadzuweisung ausgewählt. Wenn Sie die Option affinity mask auf 0 festgelegen (Standardeinstellung), legen die Planungsalgorithmen von Microsoft Windows 2000 oder Windows Server 2003 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 in Frage kommenden Prozessoren angibt.

Durch das Ausschließen der SQL Server-Threads von der Ausführung auf bestimmten Prozessoren kann Microsoft Windows 2000 oder Windows Server 2003 die Verarbeitung von Windows-spezifischen Prozessen durch das System besser auswerten. Beispielsweise könnte der Systemadministrator auf einem Server mit 8 CPUs und zwei Instanzen von SQL Server (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. Um mehr als 32 Prozessoren zu konfigurieren, legen Sie die Optionen affinity mask und affinity64 mask fest. Für affinity mask gelten folgende Werte:

  • Eine aus einem Byte bestehende affinity mask deckt bis zu 8 CPUs in einem Computer mit mehreren Prozessoren ab.
  • Eine aus zwei Byte bestehende affinity mask deckt bis zu 16 CPUs in einem Computer mit mehreren Prozessoren ab.
  • Eine aus drei Byte bestehende affinity mask deckt bis zu 24 CPUs in einem Computer mit mehreren Prozessoren ab.
  • Eine aus vier Byte bestehende affinity mask deckt bis zu 32 CPUs in einem Computer mit mehreren Prozessoren ab.
  • Für einen Computer mit mehr als 32 CPUs konfigurieren Sie eine aus vier Byte bestehende affinity mask für die ersten 32 CPUs, und eine aus bis zu vier Byte bestehende affinity64 mask für die restlichen CPUs.

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

ms187104.note(de-de,SQL.90).gifHinweis:
Sie können den Windows-Systemmonitor zum Anzeigen und Analysieren der Auslastung einzelner Prozessoren verwenden.

Die Option affinity mask muss in Verbindung mit der Konfigurationsoption affinity I/O mask verwendet werden. Aktivieren Sie dieselbe CPU nicht sowohl für affinity mask als auch für affinity I/O mask. Die Bits, die jeder CPU entsprechen, sollten einen der folgenden drei Status aufweisen:

  • 0 für die Optionen affinity mask und affinity I/O mask.
  • 1 für die Option affinity mask und 0 für die Option affinity I/O mask.
  • 1 für die Option affinity mask und 1 für die Option affinity I/O mask.
ms187104.Caution(de-de,SQL.90).gifVorsicht:
Konfigurieren Sie die CPU-Affinität nicht im Windows-Betriebssystem, und konfigurieren Sie nicht gleichzeitig die Affinitätsmaske in SQL Server. Diese Einstellungen versuchen das gleiche Ergebnis zu erzielen, und wenn die Konfigurationen inkonsistent sind, kann dies zu unvorhersehbaren Ergebnissen führen. Die SQL Server-CPU-Affinität wird am besten mithilfe der Option sp_configure in SQL Server konfiguriert.

Beispiel

Wenn z. B. zum Festlegen der Option affinity mask die Prozessoren 1, 2 und 5 als verfügbar ausgewählt wurden, und dabei die Bits 1, 2 und 5 auf 1 sowie die Bits 0, 3, 4, 6 und 7 auf 0 festgelegt sind, wird ein hexadezimaler Wert von 0x26 bzw. die Dezimalzahl 38 angegeben. Nummerieren Sie die Bits von rechts nach links. Die Option affinity mask zählt die Prozessoren von 0 bis 31 durch. Im folgenden Beispiel steht deshalb 1 für den zweiten Prozessor auf dem Server.

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

Nachfolgend werden die affinity mask-Werte für ein System mit 8 CPUs aufgeführt.

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 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 der Ausführung des Transact-SQL-Befehls RECONFIGURE wird die neue Einstellung ohne Neustart der SQL Server-Instanz sofort wirksam.

Non-Uniform Memory Access (NUMA)

Wenn hardwarebasierter NUMA (Non-Uniform Memory Access, nicht einheitlicher Speicherzugriff) verwendet wird und die Affinitätsmaske festgelegt ist, wird jedes Zeitplanungsmodul in einem Knoten seiner eigenen CPU zugeordnet. Wenn die Affinitätsmaske nicht festgelegt ist, wird jedes Zeitplanungsmodul der Gruppe von CPUs innerhalb des NUMA-Knotens zugeordnet, und ein Zeitplanungsmodul, das 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.

Lizenzierungsprobleme

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

Starten

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

Neukonfigurieren

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 ist der Befehl RECONFIGURE WITH OVERRIDE nicht zulässig.

Siehe auch

Konzepte

Festlegen von Serverkonfigurationsoptionen

Andere Ressourcen

Überwachen der Ressourcenverwendung (Systemmonitor)
RECONFIGURE (Transact-SQL)
sp_configure (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

05. Dezember 2005

Neuer Inhalt:
  • Der Abschnitt zu NUMA wurde hinzugefügt.