Wenn eine Instanz MAXDOP
auf 1 gesetzt wurde und Abfragehinweise verwendet werden, damit bestimmte Abfragen parallel geschaltet werden können, wird der Wert für den Kostenschwellenwert für Parallelität von SQL weiterhin verwendet, um zu entscheiden, ob tatsächlich parallel geschaltet werden soll oder nicht?
Einfache Antwort: ja .
Einzelheiten
Hier gibt es ein paar getrennte Dinge, die getrennt werden müssen:
Was ist der effektive maximale Grad der Parallelität zur Verfügung zu einer Abfrage?
Die Mitwirkenden hierfür sind (im Großen und Ganzen in der Reihenfolge ihrer Bedeutung):
- Resource Governor-
MAX_DOP
Einstellung
- Abfrage - Hinweis
MAXDOP
Einstellung
- Das
max degree of parallelism
Instanzkonfigurationsoption
Die Details werden in der Einstellung "Maximaler Parallelitätsgrad" des Servers, im MAX_DOP von Resource Governor und im Abfragehinweis MAXDOP erläutert. Welchen sollte SQL Server verwenden? von Jack Li, Senior Escalation Engineer für Microsoft SQL Server-Kundendienst und -Support. Die folgende Tabelle ist von diesem Link wiedergegeben:
Verwendet ein Abfrageplan Parallelität?
Das SQL Server-Abfrageoptimierungsprogramm findet immer zuerst einen seriellen Plan *.
Dann wenn:
- Eine weitere Optimierung ist gerechtfertigt; und
- Die Kosten für den besten Serienplan überschreiten den
cost threshold for parallelism
Konfigurationswert
... wird der Optimierer versuchen , einen parallelen Plan zu finden.
Dann wenn:
- Ein paralleler Plan wird gefunden (dh ist möglich); und
- Die Kosten für den Parallelplan sind geringer als für den besten Serienplan
... wird ein paralleler Plan erstellt.
Hinweis: das cost threshold for parallelism
betrifft nur , ob das Optimierungsprogramm sieht für einen parallelen Plan. Sobald ein paralleler Plan zwischengespeichert ist, wird er bei der Wiederverwendung (sofern Threads verfügbar sind) unabhängig von der CTFP-Einstellung mit Parallelität ausgeführt.
Beispiele
Für beide Beispiele mit Instanz maxdop 1 und Abfragehinweis maxdop 2 beträgt der effektive verfügbare DOP 2. Wenn ein paralleler Plan ausgewählt wird, wird DOP 2 verwendet.
Beispiel 1
Bei einem CTFP von 50 und einem günstigen seriellen Plan von 30 wird SQL Server nicht versuchen, einen parallelen Plan zu finden. Ein Serienplan wird erstellt.
Beispiel 2
Bei einem CTFP von 50 und einem günstigen seriellen Plan von 70 wird SQL Server versuchen , einen parallelen Plan zu finden. Wenn dieser Plan (falls gefunden) weniger als 70 (die Kosten des seriellen Plans) kostet, wird ein paralleler Plan erstellt.
Das Endergebnis der Abfrageoptimierung ist immer ein einzelner zwischengespeicherter Plan: seriell oder parallel. Der Optimierer findet nur einen seriellen Plan in den Phasen search0 (TP) und search1 (QP).
Es kann dann (wie beschrieben) search1 erneut ausführen, wobei ein paralleler Plan erstellt werden muss. Anschließend wird auf der Grundlage der bisher besten Gesamtplankosten zwischen seriell und parallel gewählt. Diese Auswahl ist verbindlich, falls die Optimierung zu search2 (Vollständige Optimierung) übergeht . Jede Optimierungsphase berücksichtigt viele Alternativen, aber die Ausgabe einer Stufe ist immer ein einzelner bester Plan, der entweder seriell oder parallel ist.
Ich habe darüber in Mythos geschrieben: SQL Server speichert mit jedem parallelen Plan einen seriellen Plan zwischen