Freigeben über


Konfigurieren paralleler Indexvorgänge

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric Preview

In diesem Artikel wird der maximale Grad an Parallelität definiert und erläutert, wie Sie diese Einstellung in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL ändern.

In Multiprozessorsystemen, die SQL Server Enterprise oder höher ausführen, können Indexanweisungen mehrere Prozessoren (CPUs) verwenden, um die Überprüfungs-, Sortier- und Indexvorgänge auszuführen, die der Index-Anweisung zugeordnet sind, genau wie bei anderen Abfragen. Die Anzahl der CPUs, die zur Ausführung einer einzelnen Indexanweisung verwendet werden, wird durch die Serverkonfigurationsoption Max. Grad an Parallelität sowie durch die aktuelle Arbeitslast und die Indexstatistiken bestimmt.

Mit der Option Max. Grad an Parallelität wird die maximale Anzahl der Prozessoren festgelegt, die bei der Ausführung paralleler Pläne verwendet werden sollen. Wenn die SQL Server-Datenbank-Engine erkennt, dass das System ausgelastet ist, wird der Grad an Parallelität für den Indexvorgang automatisch reduziert, bevor mit der Ausführung der Anweisung begonnen wird. Die Datenbank-Engine kann den Grad der Parallelität auch verringern, wenn die führende Schlüsselspalte eines nicht partitionierten Indexes eine begrenzte Anzahl unterschiedlicher Werte aufweist, oder wenn die Häufigkeit der einzelnen unterschiedlichen Werte stark schwankt. Weitere Informationen finden Sie unter Handbuch zur Architektur der Abfrageverarbeitung.

Note

Parallele Indexvorgänge sind in jeder SQL Server-Edition nicht verfügbar. Weitere Informationen finden Sie unter Editionen und unterstützte Funktionen von SQL Server 2022.

Einschränkungen

  • Mit der Anzahl der Prozessoren, die vom Abfrageoptimierer verwendet wird, kann zumeist eine optimale Leistung gewährleistet werden. Allerdings können bestimmte Vorgänge, wie das Erstellen, erneute Erstellen oder Löschen sehr großer Indizes die Ressourcen stark beanspruchen, wodurch während des Indexvorgangs möglicherweise nicht genügend Ressourcen für andere Anwendungen und Datenbankvorgänge verfügbar sind.

    Wenn dieses Problem auftritt, können Sie die zum Ausführen der Indexanweisung verwendete maximale Anzahl von Prozessoren manuell konfigurieren, indem Sie die Anzahl von Prozessoren für den Indexvorgang verringern.

  • Die MAXDOP Indexoption überschreibt die maximale Parallelitätskonfigurationsoption nur für die Abfrage, die diese Option angibt. In der folgenden Tabelle sind die gültigen ganzzahligen Werte aufgeführt, die mit der Maximalen Parallelitätskonfigurationsoption und der MAXDOP Indexoption angegeben werden können.

    Value Description
    0 Gibt an, dass der Server die Anzahl der CPUs festlegt, die verwendet werden, abhängig von der aktuellen Systemarbeitsauslastung. Dies ist die Standardeinstellung und die empfohlene Einstellung.
    1 Unterdrückt das Generieren paralleler Pläne. Der Vorgang wird fortlaufend ausgeführt.
    2-64 Schränkt die Anzahl der Prozessoren auf den angegebenen Wert ein. Je nach aktueller Workload können weniger Prozessoren verwendet werden. Wird ein Wert angegeben, der über der Anzahl der verfügbaren CPUs liegt, wird die tatsächliche Anzahl der CPUs verwendet.
  • Parallele Indexausführung und die MAXDOP Indexoption gelten für die folgenden Transact-SQL-Anweisungen:

  • Die MAXDOP Indexoption kann in der ALTER INDEX (...) REORGANIZE Anweisung nicht angegeben werden.

  • Die Arbeitsspeicheranforderungen für partitionierte Indexvorgänge, bei denen eine Sortierung erforderlich ist, können größer sein, wenn der Abfrageoptimierer Grade an Parallelität beim Erstellungsvorgang verwendet. Je höher der Grad der Parallelität ist, desto höher ist der Speicherbedarf. Weitere Informationen finden Sie unter partitionierte Tabellen und Indizes.

Erlaubnisse

Erfordert die ALTER-Berechtigung für die Tabelle oder Sicht.

Verwenden von SQL Server Management Studio

Festlegen des maximalen Grads der Parallelität für einen Index

  1. Wählen Sie im Objekt-Explorer das Pluszeichen aus, um die Datenbank zu erweitern, die die Tabelle enthält, auf der Sie den maximalen Grad der Parallelität für einen Index festlegen möchten.

  2. Erweitern Sie den Ordner Tabellen .

  3. Wählen Sie das Pluszeichen aus, um die Tabelle zu erweitern, auf der Sie den maximalen Grad der Parallelität für einen Index festlegen möchten.

  4. Erweitern Sie den Ordner Indizes .

  5. Klicken Sie mit der rechten Maustaste auf den Index, für den Sie den maximalen Grad an Parallelität festlegen möchten, und wählen Sie Eigenschaftenaus.

  6. Wählen Sie unter Seite auswählendie Option Optionenaus.

  7. Wählen Sie Maximaler Grad an Parallelitätaus, und geben Sie dann einen Wert zwischen 1 und 64 ein.

  8. Wählen Sie OK aus.

Verwenden von Transact-SQL

Festlegen des maximalen Grads der Parallelität für einen vorhandenen Index

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. Dieser Code ändert den IX_ProductVendor_VendorID Index in der Purchasing.ProductVendor Tabelle so, dass die Ausführung des Indexvorgangs auf acht oder weniger Prozessoren beschränkt wird, falls der Server über acht oder mehr Prozessoren verfügt.

    USE AdventureWorks2022;
    GO
    
    ALTER INDEX IX_ProductVendor_VendorID
        ON Purchasing.ProductVendor REBUILD WITH(MAXDOP = 8);
    GO
    

Weitere Informationen finden Sie unter ALTER INDEX.

Angeben des maximalen Parallelitätsgrads beim Erstellen eines neuen Indexes

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.

    USE AdventureWorks2022;
    GO
    
    CREATE INDEX IX_ProductVendor_NewVendorID
        ON Purchasing.ProductVendor(BusinessEntityID) WITH (MAXDOP = 8);
    GO