Wann müssen Änderungen an der Kostenschwelle für Parallelität vorgenommen werden?

10

Bei der Untersuchung eines Leistungsproblems habe ich einen Zustrom von CXPACKETS festgestellt, der darauf hindeutet, dass ich möglicherweise die Kostenschwelle für Parallelität und möglicherweise den MAXDOP prüfen muss.

Bevor ich drastische Änderungen am MAXDOP vornehme, habe ich den Rat vieler anderer befolgt, einschließlich des von @mrdenny in der Antwort auf die Leistungsoptimierung von CXPACKET Waits für SQL Server 2008 und der Antwort von @ aron-Bertrand aus dem Umgang mit CXPACKET-Wartezeiten - Festlegen des Kostenschwellenwerts für Parallelität . Ich habe die Wartung erweitert, um die Statistiken jede Nacht vollständig zu aktualisieren. Das fühlt sich wie ein vernünftiger Schachzug an.

Änderungen an der Kostenschwelle sind jedoch immer noch etwas, das mich nervt.

Ab wann sollte die Kostenschwelle für Parallelität geändert werden? Hat jemand ein Beispiel dafür, wo er (nach Prüfung der Kosten seiner Abfragen und seiner Arbeitsbelastung) Änderungen an diesen Kosten vorgenommen hat?

Entschuldigt sich, wenn dies etwas ist, was in einer vorherigen Frage beantwortet wurde.

Vielen Dank!

the_good_pony
quelle

Antworten:

3

Die Verwendung von MAXDOP = 1 kann eine Hilfe sein, ist aber eine große Waffe. Es kann sein, dass das eigentliche Problem die Nützlichkeit der Indizes ist. Vielleicht würde ein neuer oder ein anderer Index das Problem lösen.

Haben Sie nach den Kommentaren von Herrn Denny und Aaron Bertrand herausgefunden, welche anderen Wartezeiten in diesem Zusammenhang wahrscheinlich die Ursache für die Wartezeiten von CXPACKET waren?

Jonathan Kehayias schlug eine Abfrage vor, mit deren Hilfe Sie Ihre Parallelitätserfahrung beurteilen und eine nachdenklichere Entscheidung treffen können. Sie sollten aber auch das Gespräch zwischen Jonathan und Paul White lesen.

https://www.sqlskills.com/blogs/jonathan/tuning-cost-threshold-for-parallelism-from-the-plan-cache/

RLF
quelle
1

Ich würde vorschlagen, dass Sie sich zuerst die MAXDOP-Einstellungen ansehen, da die Standardeinstellung 0 (alle verfügbaren Threads verwenden) gefährlich sein kann, da eine außer Kontrolle geratene Abfrage, die alle verfügbaren Threads verbraucht, zu einem Thread-Hunger führt.

In meiner Antwort hier erfahren Sie, wie Sie die MAXDOP-Einstellung für Ihre Serverinstanz berechnen.

Der Kostenschwellenwert für Parallelität bezieht sich auf die Mindestabfragekosten, bevor Parallelität vom Optimierer berücksichtigt wird.

Denken Sie daran, dass das Warten auf CXPACKET nur Symptome sind, die darauf zurückzuführen sind, dass im Zusammenhang mit der Abfrage etwas nicht stimmt - veraltete Statistiken oder fehlender Index, was zu einem schlechten oder anderen Plan führt.

Sie können sys.dm_exec_cached_plansund sys.dm_exec_query_planDMVs verwenden, um Informationen aus dem Plan-Cache abzurufen, wie unter Optimieren von 'Kostenschwelle für Parallelität' aus dem Plan-Cache von Jonathan und Kostenschwelle für Parallelität beschrieben .

Ich würde vorschlagen, die cost threshold for parallelismStandardeinstellung beizubehalten, es sei denn, Sie haben die Ressourcen für die Optimierung von Abfragen erschöpft, die Verwaltung von Indizes und Statistiken durchgeführt und überprüft, ob keine Indizes fehlen, von denen Ihre Abfrage möglicherweise profitiert.

Hinweis: Die Maxdop-Einstellung kann auch auf Abfrageebene angewendet werden, OPTION (MAXDOP n)wodurch die serverweite Einstellung überschrieben wird.

Kin Shah
quelle