Parallele Abfrageverarbeitung

SQL Server ermöglicht parallele Abfragen, um die Abfrageausführung und Indexvorgänge für Computer zu optimieren, die über mehrere Mikroprozessoren (CPUs) verfügen. Da SQL Server mehrere Betriebssystemthreads verwenden kann, um eine Abfrage oder einen Indexvorgang parallel auszuführen, kann der betreffende Vorgang schnell und effizient ausgeführt werden.

Während der Abfrageoptimierung sucht SQL Server nach Abfragen oder Indexvorgängen, für die eine parallele Ausführung vorteilhaft ist. Für diese Abfragen fügt SQL Server Verteilungsoperatoren in den Abfrageausführungsplan ein, um die Abfrage für die parallele Ausführung vorzubereiten. Ein Verteilungsoperator ist ein Operator in einem Plan für die Abfrageausführung, der die Prozessverwaltung, die Neuverteilung der Daten und die Ablaufsteuerung ermöglicht. Der Verteilungsoperator schließt die logischen Operatoren Distribute Streams, Repartition Streams und Gather Streams als Untertypen ein. Einer oder mehrere dieser Operatoren können in der Showplan-Ausgabe eines Abfrageplans für eine parallele Abfrage enthalten sein.

Nach dem Einfügen eines Verteilungsoperators ist das Ergebnis ein Plan für eine parallele Abfrageausführung. Ein Plan für die parallele Abfrageausführung kann mehrere Threads verwenden. Ein serieller Ausführungsplan, der von einer nicht parallelen Abfrage verwendet wird, verwendet nur einen Thread bei seiner Ausführung. Die tatsächliche Anzahl der Threads, die von einer parallelen Abfrage verwendet werden, wird während der Initialisierung der Abfrageplanausführung bestimmt und durch die Komplexität des Plans und den Grad der Parallelität bestimmt. Der Grad der Parallelität bestimmt die maximal verwendete Anzahl von CPUs; er bezieht sich nicht auf die Anzahl der verwendeten Threads. Der Wert für den Grad der Parallelität wird auf Serverebene festgelegt und kann mithilfe der gespeicherten Systemprozedur sp_configure geändert werden. Sie können diesen Wert für einzelne Abfrage- oder Indexanweisungen außer Kraft setzen, indem Sie den MAXDOP-Abfragehinweis oder die MAXDOP-Indexoption angeben.

Der SQL Server-Abfrageoptimierer verwendet keinen parallelen Ausführungsplan für eine Abfrage, wenn eine der folgenden Bedingungen zutrifft:

  • Die Kosten für die serielle Ausführung der Abfrage sind nicht hoch genug, um einen parallelen Ausführungsplan zu rechtfertigen.

  • Ein serieller Ausführungsplan wird für die betreffende Abfrage als schneller erachtet als jeder mögliche parallele Ausführungsplan.

  • Die Abfrage enthält skalare oder relationale Operatoren, die nicht parallel ausgeführt werden können. Bestimmte Operatoren können verursachen, dass ein Abschnitt des Ausführungsplans oder der gesamte Plan im seriellen Modus ausgeführt wird.