Grad der Parallelität
SQL Server 2005 erkennt automatisch den am besten geeigneten Grad an Parallelität für jede Instanz einer parallelen Abfrageausführung oder eines DDL-Indizierungsvorgangs (Data Definition Language). Dazu werden die folgenden Kriterien untersucht:
- Wird SQL Server auf einem Computer mit mehreren Mikroprozessoren (oder CPUs) ausgeführt wie z. B. auf einem symmetrischen Multiprozessorcomputer (Symmetric Multiprocessing, SMP)?
Nur Computer mit mehreren CPUs können parallele Abfragen verwenden. - Sind ausreichend Threads verfügbar?
Jeder Abfrage- oder Indexvorgang setzt zu seiner Ausführung eine bestimmte Anzahl von Threads voraus. Das Ausführen eines parallelen Planes erfordert mehr Threads als ein serieller Plan, und die Anzahl der erforderlichen Threads steigt mit dem Grad der Parallelität. Wenn die Threadanforderung des parallelen Planes für einen bestimmten Grad der Parallelität nicht erfüllt werden kann, reduziert das Datenbankmodul den Grad an Parallelität automatisch oder verwirft den parallelen Plan in dem angegebenen Arbeitsauslastungskontext. Stattdessen wird der serielle Plan (ein Thread) ausgeführt. - Welcher Abfragetyp oder Indexvorgangstyp soll ausgeführt werden?
Indexvorgänge, die einen Index erstellen oder neu erstellen oder einen gruppierten Index löschen, sowie Abfragen, die sehr viele CPU-Zyklen beanspruchen, eignen sich am besten für einen parallelen Plan. So sind z. B. Verknüpfungen großer Tabellen, umfassende Aggregationen und Sortierungen großer Resultsets gut geeignet. Für einfache Abfragen, die häufig in transaktionsverarbeitenden Anwendungen eingesetzt werden, wird der zusätzliche Aufwand, der für die Koordinierung einer parallelen Abfrageausführung erforderlich ist, durch die erwartete Leistungssteigerung in der Regel nicht gerechtfertigt. Um zu ermitteln, für welche Abfragen die parallele Ausführung sinnvoll ist und für welche dies nicht gilt, vergleicht das Datenbankmodul die geschätzten Kosten für die Ausführung der Abfrage oder des Indexvorgangs mithilfe des cost threshold for parallelism-Wertes. Mithilfe vonsp_configure können Benutzer den Standardwert 5 ändern; dies wird jedoch nicht empfohlen. - Gibt es eine ausreichende Anzahl von zu verarbeitenden Zeilen?
Wenn der Abfrageoptimierer ermittelt, dass die Anzahl der Zeilen zu niedrig ist, werden keine Verteilungsoperatoren eingesetzt, um die Zeilen zu verteilen. Demzufolge werden die Operatoren seriell ausgeführt. Durch das Ausführen der Operatoren in einem seriellen Plan werden Situationen vermieden, in denen die Kosten für Start, Verteilung und Koordinierung den Nutzen übersteigen, der durch die parallele Ausführung der Operatoren erzielt würde. - Sind aktuelle Verteilungsstatistiken verfügbar?
In früheren Versionen von SQL Server hat das Datenbankmodul parallele Pläne verworfen, wenn die verfügbaren Statistiken das Datenbankmodul daran gehindert haben, den höchsten Grad der Parallelität bereitzustellen. Wenn in SQL Server 2005 der höchste Grad der Parallelität nicht möglich ist, werden zunächst niedrigere Grade in Betracht gezogen, bevor der parallele Plan verworfen wird.
Wenn Sie z. B. einen gruppierten Index für eine Sicht erstellen, können die Statistiken nicht ausgewertet werden, weil der gruppierte Index noch nicht vorhanden ist. In diesem Fall kann das Datenbankmodul nicht den höchsten Grad der Parallelität für den Indexvorgang bereitstellen. Allerdings können einige Vorgänge, wie z. B. das Sortieren und Scannen, von der parallelen Ausführung profitieren.
Hinweis: |
---|
Parallelindexvorgänge sind nur in SQL Server 2005 Enterprise Edition verfügbar. |
Zur Ausführungszeit ermittelt das Datenbankmodul, ob die aktuelle Systemlast und die oben beschriebenen Konfigurationsinformationen die parallele Ausführung zulassen. Wenn die parallele Ausführung gerechtfertigt ist, ermittelt das Datenbankmodul die optimale Anzahl an Threads und verteilt dann die Ausführung des parallelen Planes auf diese Threads. Wenn die parallele Ausführung eines Abfrage- oder Indexvorgangs mit mehreren Threads gestartet wird, wird dieselbe Anzahl an Threads bis zur Beendigung des Vorgangs verwendet. Das Datenbankmodul bestimmt die optimale Anzahl an Threads jedes Mal neu, wenn ein Ausführungsplan aus dem Prozedurcache abgerufen wird. Bei einer Ausführung einer Abfrage könnte z. B. ein serieller Plan verwendet werden, bei einer späteren Ausführung derselben Abfrage ein paralleler Plan, der drei Threads verwendet, und bei der dritten Ausführung dieser Abfrage ein paralleler Plan, der vier Threads verwendet.
In einem parallelen Abfrageausführungsplan werden die Vorgänge zum Einfügen, Aktualisieren und Löschen seriell ausgeführt. Jedoch können die WHERE-Klausel einer UPDATE- oder einer DELETE-Anweisung oder der SELECT-Teil einer INSERT-Anweisung parallel ausgeführt werden. Die eigentlichen Datenänderungen werden anschließend seriell auf die Datenbank angewendet.
Statische Cursor und keysetgesteuerte Cursor können durch parallele Ausführungspläne aufgefüllt werden. Das spezifische Verhalten dynamischer Cursor kann jedoch nur durch die serielle Ausführung gewährleistet werden. Für eine Abfrage, die Teil eines dynamischen Cursors ist, generiert der Abfrageoptimierer immer einen seriellen Ausführungsplan.
Außer Kraft setzen der Grade der Parallelität
Mithilfe der Serverkonfigurationsoption max degree of parallelism kann die Anzahl der Prozessoren beschränkt werden, die bei der Ausführung paralleler Pläne verwendet werden. Die max degree of parallelism-Option kann jedoch für einzelne Abfrage- und Indexvorgangsanweisungen außer Kraft gesetzt werden, indem der MAXDOP-Abfragehinweis oder die MAXDOP-Indexoption angegeben wird. MAXDOP bietet mehr Kontrolle über einzelne Abfrage- und Indexvorgänge. Sie können z. B. die MAXDOP-Option verwenden, um durch Erweitern oder Reduzieren eine Steuerung der Anzahl der einem Onlineindexvorgang zugewiesenen Prozessoren zu bewirken. Auf diese Weise können Sie die Ressourcen, die von dem Indexvorgang verwendet werden, mit den Ressourcen gleichzeitiger Benutzer ausgleichen.
Siehe auch
Konzepte
Festlegen von Serverkonfigurationsoptionen
max degree of parallelism (Option)
Parallele Abfrageverarbeitung
Parallele Indexvorgänge
Andere Ressourcen
sp_configure (Transact-SQL)
Abfragehinweis (Transact-SQL)