High CXPACKET und LATCH_EX warten


13

Ich habe einige Leistungsprobleme mit einem Datenverarbeitungssystem, an dem ich arbeite. Ich habe Wartestatistiken von 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 in einen zentralen Clusterserver einspeisen. 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 Clusterserver verfügt über 16 Kerne und 64 GB RAM. MAXDOP ist auf 0 gesetzt.

Ich vermute, dass das CXPACKET von den mehreren parallelen Abfragen stammt, bin mir jedoch nicht sicher, was das LATCH_EX-Warteereignis anzeigt. Nach dem, was ich gelesen habe, könnte dies eine Wartezeit ohne Puffer sein?

Kann jemand vorschlagen, was die Ursache für solche Wartestatistiken ist und wie ich vorgehen sollte, um die Ursache für dieses Leistungsproblem zu ermitteln?

Die oberen Abfrageergebnisse sind die gesamten Wartestatistiken und die unteren Abfrageergebnisse sind die Statistiken über den Zeitraum von 1 Stunde SQL-Wartebeispiel


4
Hast du dir Paul Randals Blog über Latch waits angesehen? sqlskills.com/blogs/paul/… Es gibt eine Menge nützlicher Informationen, um zu bestimmen, was Latch Wait bedeutet, indem Sie aus sys.dm_os_latch_stats
Mark Sinkinson

CXPacket ist, wenn der Hauptthread der Abfrage darauf wartet, dass die parallelen Threads zurückkehren. Eine gute Erklärung und einige Möglichkeiten zur Reduzierung finden Sie in Brent Ozars Blog-Eintrag zum Thema brentozar.com/archive/2013/08/…
RubberChickenLeader

Antworten:


8

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

Außerdem sind hier einige weitere empfohlene Schritte zum Diagnostizieren der Ursache für hohe CXPACKET-Wartestatistikwerte (bevor etwas in SQL Server geändert wird):

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

  • Untersuchen Sie den Abfrage- und CXPACKET-Verlauf, um festzustellen, ob er nur ein- oder zweimal aufgetreten ist, da dies möglicherweise nur die Ausnahme im System ist, die normalerweise ordnungsgemäß funktioniert

  • Überprüfen Sie die Indizes und Statistiken der von der Abfrage verwendeten Tabellen und stellen Sie sicher, dass diese auf dem neuesten Stand sind

  • Überprüfen Sie den Kostengrenzwert 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 für das Problem und die Lösung zu finden

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



3

Neben dem Lesen der oben angegebenen Links und dem Ändern der Einstellung "Maximaler Parallelitätsgrad" von 0 auf 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 überlegen, Ihren "Kostengrenzwert für Parallelität" zu ändern, um die Parallelität 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% für CXPACKET. Viel Glück!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.