Best Practices für Parallelität

9

Was sind die besten Methoden zum Festlegen von Parallelität im Allgemeinen? Ich weiß, dass SQL Server standardmäßig 0alle verfügbaren Prozessoren verwendet, aber in welchem ​​Fall möchten Sie dieses Standardverhalten ändern?

Ich erinnere mich, dass ich irgendwo gelesen habe (ich muss nach diesem Artikel suchen), dass Sie für OLTP-Workloads die Parallelität deaktivieren sollten (setzen Sie maxdop auf 1). Ich glaube nicht, dass ich vollständig verstehe, warum Sie das tun würden.

Wann würden Sie maxdop auf SQL Server (0) halten? Wann würden Sie die Parallelität ausschalten (1)? Wann würden Sie den maxdop explizit für eine bestimmte Anzahl von Prozessoren angeben?

Was verursacht Parallelität?


quelle

Antworten:

11

Normalerweise möchten Sie die Parallelität nicht deaktivieren, da sie dadurch auch für Verwaltungsaufgaben deaktiviert wird. Am besten beheben Sie die Abfragen, die die Parallelität verursachen, indem Sie Indizes hinzufügen oder korrigieren oder Schemaänderungen vollständig vornehmen.


Basierend auf Ihren aktualisierten Fragen ...

Einige Benutzer ändern MAXDOP für vom Hersteller erstellte Anwendungen in 1, da sie die Datenbank oder das Schema nicht steuern können und nicht möchten, dass eine einzelne Abfrage das gesamte System übernimmt.

Persönlich halte ich MAXDOP bis auf einige seltene Fälle immer bei 0.

Parallelität wird durch eine einzelne Operation innerhalb eines Ausführungsplans verursacht, deren Ausführungskosten eine voreingestellte Einstellung überschreiten (die Kostenschwelle für die Parallelitätseinstellung). In diesem Fall wird der SQL Server parallel geschaltet, sodass er die Anforderung mit mehreren Threads bearbeiten kann, um den Prozess zu beschleunigen. Der Standardwert für den Kostenschwellenwert für Parallelität ist 5. Auf vielen OLTP-Plattformen sollten Sie diesen Wert auf 30 oder 40 erhöhen, damit die Parallelität nur für die wirklich teuren Abfragen einsetzt.

mrdenny
quelle
4

Ich habe in all meiner Zeit mit SQL Server (letztes Jahrtausend, SQL Server 6.5) noch nie die Notwendigkeit gesehen, Parallelitätseinstellungen auszuschalten oder zu ändern.

In Anlehnung an die Antwort von @StanleyJohns ...
Ein OLTP-System mit kurzen, scharfen Abfragen sollte niemals die Kostenschwelle ( "Kostenschwelle für Parallelität" ) erreichen, daher sollte es keine Rolle spielen. Wenn Sie einige Abfragen haben, die parallel verlaufen, warum sollten Sie sie dann aufgrund von etwas Unbewiesenem einschränken?

Ich habe auch noch kein reines OLTP-System gesehen. Im Extremfall gibt es vielleicht solche, aber das durchschnittliche System berichtet auch darüber. ob innerhalb eines Tages oder über Nacht. Diese Abfragen verlaufen eher parallel und profitieren davon.

Bei so vielen heute verfügbaren CPU-Kernen ist es wohl angebracht, den globalen "maximalen Parallelitätsgrad" festzulegen, wenn Sie einen Unterschied messen und feststellen können.

Wie gesagt, mein Vorschlag ist, nichts zu tun . Ähnlich wie @mrdenny, aber ich würde einschließen: "Es gibt kein reines OLTP-System."

Wenn Sie sagen, dass es möglicherweise einige Kilometer gibt, werden Hyperthread-Kerne auf BIOS-Ebene deaktiviert, aber das ist eine andere Frage ...

Bitte beachten Sie auch

gbn
quelle
3

Was verursacht Parallelität?: Es gibt eine Einstellung namens cost threshold for parallelism. Sobald dieser Schwellenwert überschritten wird, wird Parallelität verwendet (wenn die Voraussetzungen erfüllt sind).

Die Natur eines OLTP-Systems besteht darin, eine große Anzahl schneller und kurzer Transaktionen zu haben. Die Verwendung von Parallelität verlängert manchmal die Abfrageverarbeitungszeit, da die Abfrage aufgeteilt wird, um parallel verarbeitet zu werden, und dann vor der Rückgabe wieder zusammengefügt wird. Daher sehen Sie Vorschläge, um maxdop auf 1 zu setzen.

Ein Vorteil der Einstellung von maxdop auf 1 besteht darin, dass die Parallelität standardmäßig deaktiviert ist. Sie können sie jedoch auf Abfrageebene mit aktivieren query hints.

Bei Data Warehouse-Systemen oder OLAP-Systemen, bei denen große Ergebnismengen zurückgegeben werden, kann die Aufteilung der Abfrage mithilfe von Parallelität von Vorteil sein. Auf diese Weise kann die Abfrage die verfügbaren Kerne nutzen, um die Abfrageverarbeitungszeit zu verkürzen.

Stanley Johns
quelle
2

Ich habe eine komplexe Abfrage gesehen, die in mehrere Prozesse aufgeteilt ist und deren Ausführung Stunden in Anspruch nimmt. Normalerweise wird dies in sp_who2 als mehrere Einträge mit derselben Spid angezeigt.

Ändern Sie es in maxdop 1 und die Abfrage wird in weniger als einer Minute ausgeführt.

Die Lehre hier ist, dass der Motor es nicht immer richtig macht, wenn es um Parallelität geht.

Jimbo
quelle
0

Wir haben viele Server mit 4 Kernen und einige mit 8 Kernen. Ich empfehle bei so wenigen Kernen, die Parallelität (MAXDOP) auf 1 zu setzen, um Wartezeiten auf der CPU (und auch Timeout-Probleme) für Benutzer von OLTP-Systemen zu vermeiden. Für OLAP- oder Berichtsserver mit so wenigen Kernen empfehle ich, MAXDOP auf 2 und den Kostenschwellenwert auf 30 zu setzen (dies kann für Ihr Szenario höher oder etwas niedriger sein), damit nur die schwersten Abfragen Parallelität verwenden.

Todd
quelle