Freigeben über


Affinitätsmaske Serverkonfigurationsoption

Hinweis

Dieses Feature wird in einer zukünftigen Version von Microsoft SQL Server entfernt. Verwenden Sie dieses Feature nicht in neuer Entwicklungsarbeit, und ändern Sie Anwendungen, die dieses Feature derzeit so schnell wie möglich verwenden. Verwenden Sie stattdessen ALTER SERVER CONFIGURATION (Transact-SQL).

Zum Ausführen von Multitasking verschieben Microsoft Windows manchmal Prozessthreads unter 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. Durch das Zuweisen von Prozessoren zu bestimmten Threads kann die Leistung unter diesen Bedingungen verbessert werden, indem Prozessorneuladungen vermieden und die Thread-Migration zwischen Prozessoren verringert wird (wodurch der Kontextwechsel reduziert wird); eine solche Zuordnung zwischen einem Thread und einem Prozessor wird als Prozessoraffinität bezeichnet.

SQL Server unterstützt die Prozessoraffinität mithilfe von zwei Affinitätsmaskenoptionen: Affinitätsmaske (auch als CPU-Affinitätsmaske bezeichnet) und Affinitäts-E/A-Maske. Weitere Informationen zur Affinitäts-E/A-Maskierungsoption finden Sie unter Affinität Input-Output Maskenoption für die Serverkonfiguration. CPU- und E/A-Affinitätsunterstützung für Server mit 33 bis 64 Prozessoren erfordert die zusätzliche Verwendung der Affinity64-Masken-Serverkonfigurationsoption und Affinity64-Input-Output-Masken-Serverkonfigurationsoption.

Hinweis

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

Die Affinitätsmaskenoption, die in früheren Versionen von SQL Server vorhanden war, steuert dynamisch die CPU-Affinität.

In SQL Server kann die Affinitätsmaskenoption 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 ausführen, nachdem Sie eine Konfigurationsoption festgelegt haben. Wenn Sie SQL Server Express verwenden, erfordert das Ändern der Affinitätsmaskenoption einen Neustart.

Ä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 beispielsweise eine neue Instanz von SQL Server dem Server hinzugefügt wird, kann es erforderlich sein, Anpassungen an der Affinitätsmaskenoption vorzunehmen, 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 Planungsprogramm, das heruntergefahren wurde, wird als offline gekennzeichnet, damit keine neuen Aufträge darauf geplant werden.

Unabhängig davon, ob ein neuer Scheduler hinzugefügt oder entfernt wird, werden die dauerhaften Systemaufgaben wie Lockmonitor, Prüfpunkt, Systemaufgabenthread (Verarbeitung von DTC) und signalisierter Prozess weiterhin auf dem Scheduler ausgeführt, während der Server betriebsbereit ist. Diese dauerhaften Systemaufgaben werden nicht dynamisch migriert. Um die Prozessorlast für diese Systemaufgaben über die Zeitplaner neu zu verteilen, ist es erforderlich, die SQL Server-Instanz neu zu starten. Falls SQL Server versucht, einen Planer für einen permanenten Systemtask herunterzufahren, wird der Task weiterhin im Offlineplaner ausgeführt (keine Migration). Dieser Scheduler ist an die Prozessoren in der geänderten Affinitätsmaske gebunden und sollte keine Last auf den Prozessor setzen, mit dem er vor der Änderung affinitiert wurde. Zusätzliche Offline-Scheduler sollten sich nicht erheblich auf die Auslastung des Systems auswirken. Wenn dies nicht der Fall ist, ist ein Neustart des Datenbankservers erforderlich, um diese Aufgaben neu zu konfigurieren.

Die E/A-Affinitätsaufgaben (z. B. Lazywriter und Logwriter) werden direkt von der E/A-Affinitätsmaske beeinflusst. Wenn die Lazywriter- und Logwriter-Aufgaben nicht affinitiert sind, befolgen sie dieselben Regeln, die für die anderen dauerhaften Aufgaben wie Lockmonitor oder Prüfpunkt definiert sind.

Um sicherzustellen, dass die neue Affinitätsmaske gültig ist, überprüft der Befehl "RECONFIGURE", ob die normalen CPU- und E/A-Affinitäten sich gegenseitig ausschließen. Wenn dies nicht der Fall ist, wird an die Clientsitzung und an das SQL Server-Fehlerprotokoll eine Fehlermeldung gemeldet, die angibt, dass eine solche Einstellung nicht empfohlen wird. Die Ausführung von RECONFIGURE WITH OVERRIDE-Optionen ermöglicht CPU- und E/A-Affinitäten, die sich nicht gegenseitig ausschließen.

Wenn Sie eine Affinitätsmaske angeben, die versucht, einer nicht vorhandenen CPU zuzuordnen, meldet der Befehl RECONFIGURE sowohl der Clientsitzung als auch dem SQL Server-Fehlerprotokoll eine Fehlermeldung. Die Verwendung der Option REKONFIGURE WITH OVERRIDE hat in diesem Fall keine Auswirkung, und derselbe Konfigurationsfehler wird erneut gemeldet.

Sie können sql Server-Aktivitäten auch von Prozessoren ausschließen, denen bestimmte Workloadzuweisungen vom Betriebssystem Windows 2000 oder Windows Server 2003 zugewiesen wurden. Wenn Sie einen Bit für einen Prozessor auf 1 festlegen, wird dieser Prozessor vom SQL Server-Datenbankmodul für die Threadzuweisung ausgewählt. Wenn Sie affinity mask auf 0 (Standardeinstellung) setzen, legen die Terminierungsalgorithmen von Microsoft Windows 2000 oder Windows Server 2003 die Thread-Affinitä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 die Abgrenzung von SQL Server-Threads, die auf bestimmten Prozessoren ausgeführt werden, kann Microsoft Windows 2000 oder Windows Server 2003 die Behandlung von Prozessen, die für Windows spezifisch sind, effizienter beurteilen. Beispielsweise kann der Systemadministrator auf einem 8-CPU-Server mit zwei Instanzen von SQL Server (Instanz A und B) die Affinitätsmaskenoption verwenden, um den ersten Satz von 4 CPUs instanz A und dem zweiten Satz von 4 zu Instanz B zuzuweisen. Um mehr als 32 Prozessoren zu konfigurieren, legen Sie sowohl die Affinitätsmaske als auch die Affinität64-Maske fest. Für affinity mask gelten folgende Werte:

  • Ein Byte affinity mask deckt bis zu 8 CPUs auf einem Multiprozessorcomputer ab.

  • Ein Zwei-Byte affinity mask deckt bis zu 16 CPUs auf einem Multiprozessorcomputer ab.

  • Ein Drei-Byte affinity mask deckt bis zu 24 CPUs auf einem Multiprozessorcomputer ab.

  • Ein vier Byte affinity mask kann bis zu 32 CPUs in einem Multiprozessorcomputer unterstützen.

  • Um mehr als 32 CPUs abzudecken, konfigurieren Sie eine Vier-Byte-Affinitätsmaske für die ersten 32 CPUs und bis zu einer Vier-Byte-Affinität64-Maske für die verbleibenden CPUs.

Da das Festlegen der SQL Server-Prozessoraffinität ein spezieller Vorgang ist, empfiehlt es sich, diese nur bei Bedarf zu verwenden. In den meisten Fällen bietet die Standardaffinität von Microsoft Windows 2000 oder Windows Server 2003 die beste Leistung. 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.

Hinweis

Sie können den Windows-Systemmonitor verwenden, um die individuelle Prozessornutzung anzuzeigen und zu analysieren.

Wenn Sie die Affinitäts-E/A-Maskenoption angeben, müssen Sie sie in Verbindung mit der Konfigurationsoption "Affinitätsmaske" verwenden. Aktivieren Sie dieselbe CPU nicht sowohl im affinity mask Schalter als auch in der Affinitäts-E/A-Maskenoption. Die Bits, die jeder CPU entsprechen, sollten einen der folgenden drei Status aufweisen:

  • 0 sowohl in der Affinitätsmaskenoption als auch in der Affinitäts-E/A-Maskenoption.

  • 1 in der Affinitätsmaskenoption und 0 in der Affinitäts-E/A-Maskenoption.

  • 0 bei der Affinitätsmaskenoption und 1 bei der Affinitäts-E/A-Maskenoption.

Vorsicht

Konfigurieren Sie die CPU-Affinität nicht im Windows-Betriebssystem, konfigurieren Sie jedoch die Affinitätsmaske in SQL Server. Diese Einstellungen zielen auf dasselbe Ergebnis. Wenn die Konfigurationen inkonsistent sind, kann dies zu unvorhersehbaren Ergebnissen führen. Die SQL Server-CPU-Affinität ist am besten mit der option sp_configure in SQL Server konfiguriert.

Beispiel

Ein Beispiel für das Festlegen der Affinitätsmaskenoption ist, wenn die Prozessoren 1, 2 und 5 als verfügbar ausgewählt sind, indem die Bits 1, 2 und 5 auf 1 gesetzt und die Bits 0, 3, 4, 6 und 7 auf 0 festgelegt werden, wird ein Hexadezimalwert von 0x26 oder das dezimale Äquivalent von 38 angegeben. Nummerieren Sie die Bits von rechts nach links. Die Affinitätsmaskenoption beginnt mit der Zählung von Prozessoren von 0 bis 31, sodass im folgenden Beispiel der Zähler 1 den zweiten Prozessor auf dem Server darstellt.

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

Dies sind 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

Die Affinitätsmaskenoption ist eine erweiterte Option. Wenn Sie die Systemprozedur sp_configure verwenden, um die Einstellung zu ändern, können Sie affinity mask nur dann ändern, wenn erweiterte Optionen auf 1 festgelegt ist. Nach dem Ausführen des Befehls Transact-SQL RECONFIGURE wird die neue Einstellung sofort wirksam, ohne dass ein Neustart der SQL Server-Instanz erforderlich ist.

Nicht einheitlicher Speicherzugriff (NUMA)

Wenn Sie hardwarebasierten, nicht-uniformen Speicherzugriff (NUMA) verwenden und die Affinitätsmaske festgelegt ist, wird jeder Scheduler in einem Knoten an die eigene CPU gebunden. Wenn die Affinitätsmaske nicht festgelegt ist, wird jeder Planer auf die Gruppe der CPUs innerhalb des NUMA-Knotens affinitiert, und ein Scheduler, der NUMA-Knoten N1 zugeordnet ist, kann die Arbeit an einer beliebigen CPU im Knoten planen, aber 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. SQL Server lässt keine Konfiguration von Affinitätsmasken-Optionen zu, die gegen die Lizenzierungsrichtlinie verstößt.

Unternehmensgründung

Wenn eine angegebene Affinitätsmaske die Lizenzierungsrichtlinie beim Starten von SQL Server oder während der Datenbankanfügung verletzt, schließt die Modulebene den Startvorgang oder den Datenbankanfügungs-/Wiederherstellungsvorgang ab, und dann wird der sp_configure Ausführungswert für die Affinitätsmaske auf Null zurückgesetzt, und es wird eine Fehlermeldung an das SQL Server-Fehlerprotokoll ausgegeben.

Rekonfigurieren

Wenn eine angegebene Affinitätsmaske gegen die Lizenzierungsrichtlinie verstößt, während der RECONFIGURE-Befehl mit Transact-SQL ausgeführt wird, wird eine Fehlermeldung an die Clientsitzung und an das SQL Server-Fehlerprotokoll gemeldet, wodurch der Datenbankadministrator die Affinitätsmaske neu konfigurieren muss. In diesem Fall wird kein Befehl "RECONFIGURE WITH OVERRIDE" akzeptiert.

Siehe auch

Überwachen der Ressourcenverwendung (Systemmonitor)
RECONFIGURE (Transact-SQL)
Serverkonfigurationsoptionen (SQL Server)
sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)