it-swarm.com.de

High CXPACKET und LATCH_EX warten

Ich habe einige Leistungsprobleme mit einem Datenverarbeitungssystem, an dem ich arbeite. Ich habe Wartestatistiken aus einem einstündigen Peroid gesammelt, die eine große Anzahl von CXPACKET- und LATCH_EX-Warteereignissen anzeigen.

Das System besteht aus 3 verarbeitenden SQL-Servern, die eine Menge Zahlenverarbeitung und Berechnungen durchführen und die Daten dann einem zentralen Clusterserver zuführen. Auf den Verarbeitungsservern können jeweils bis zu 6 Jobs gleichzeitig ausgeführt werden. Diese Wartestatistiken beziehen sich auf den zentralen Cluster, der meiner Meinung nach einen Engpass verursacht. Der zentrale Cluster-Server verfügt über 16 Kerne und 64 GB RAM. MAXDOP wird auf 0 gesetzt.

Ich denke, das CXPACKET stammt aus mehreren parallel ausgeführten Abfragen, bin mir jedoch nicht sicher, was das Warteereignis LATCH_EX anzeigt. Nach dem, was ich gelesen habe, könnte dies eine Wartezeit ohne Puffer sein?

Kann jemand vorschlagen, was die Ursache für diese Art von Wartestatistiken ist und welche Maßnahmen ich ergreifen sollte, um die Grundursache für dieses Leistungsproblem zu untersuchen?

Die oberen Abfrageergebnisse sind die gesamten Wartestatistiken und das untere Abfrageergebnis sind die Statistiken über den Zeitraum von 1 Stunde SQL Wait sample

13
stumct

CXPACKET kann mit einem LATCH_XX begleitet werden (möglicherweise auch mit PAGEIOLATCH_XX oder SOS_SCHEDULER_YIELD). Wenn dies der Fall ist (und ich glaube, basierend auf der Frage), sollte der MAXDOP-Wert gesenkt werden, um zu Ihrer Hardware zu passen.

Außerdem finden Sie hier einige weitere empfohlene Schritte zur Diagnose der Ursache für hohe CXPACKET-Wartestatistikwerte (bevor Sie etwas in SQL Server ändern):

  • Setzen Sie MAXDOP nicht auf 1, da dies niemals die Lösung ist

  • Untersuchen Sie die Abfrage und den CXPACKET-Verlauf, um zu verstehen und festzustellen, ob es sich um etwas handelt, das nur ein- oder zweimal aufgetreten ist, da dies nur die Ausnahme im System sein kann, das normalerweise ordnungsgemäß funktioniert

  • Überprüfen Sie die Indizes und Statistiken der von der Abfrage verwendeten Tabellen und stellen Sie sicher, dass sie aktuell sind

  • Überprüfen Sie den Kostenschwellenwert für Parallelität (CTFP) und stellen Sie sicher, dass der verwendete Wert für Ihr System geeignet ist

  • Überprüfen Sie, ob dem CXPACKET ein LCK_M_XX beigefügt ist (normalerweise zusammen mit IO_COMPLETION und ASYNC_IO_COMPLETION). Wenn dies der Fall ist, ist Parallelität nicht der Engpass. Beheben Sie diese Wartestatistiken, um die Hauptursache des Problems und der Lösung zu finden

Wenn Sie den CXPACKET-Wartetyp wirklich genau verstehen müssen, empfehlen wir Ihnen, den Artikel Fehlerbehebung beim CXPACKET-Wartetyp in SQL Server zu lesen

8
Gustav

Read Diagnostizieren und Beheben von Latch-Konflikten unter SQL Server ist das umfassendste Dokument zu diesem Thema. Sie müssen sich mit sys.dm_os_latch_stats und sehen, auf welchen Latch-Typ der Konflikt ist.

Überprüfen Sie, ob das Lesen von Analysieren der SQL Server-Leistung Ihnen in irgendeiner Weise hilft.

7
Remus Rusanu

Zusätzlich zum Lesen der oben angegebenen Links und höchstwahrscheinlich zum Ändern Ihrer Einstellung "Maximaler Parallelitätsgrad" von 0 auf etwa 8 möchten Sie eingrenzen, welche Ihrer Abfragen parallel verlaufen und welche Kosten sie verursachen.

Nachdem Sie die Auswirkungen dieser Änderung gesehen haben, können Sie auch Ihren "Kostenschwellenwert für Parallelität" ändern, um die Parallelen zu optimieren.

Hier ist ein großartiges Video von Brent Ozar, das Ihnen helfen wird: Beherrschen der Kunst von CXPACKET und MAXDOP

Ihr Ziel ist eine Wartezeit von <= 50% Prozent für CXPACKET. Viel Glück!!

3
drumatix