Geringe CPU-Auslastung, aber hohe Signalwartezeiten

8

Ich habe einen Server mit 16 CPUs, der mit einer max degree of parallelism8 und einer max worker threadsEinstellung von Null konfiguriert ist .

Während einer bestimmten Stunde betrug meine Signalwartezeit 20%, aber meine CPU-Auslastung des Betriebssystems stieg in dieser Zeit nie über 25%. Kann jemand erklären, warum meine Signalwartezeiten so hoch waren?

Mein Anbieter verfügt über ein erstklassiges Bewertungssystem, das erwartet, dass wir 10% oder weniger Signalwartezeiten haben, oder wir werden dinged. Wie kann ich das beheben (ohne zusätzliche CPUs hinzuzufügen)?

  • Wir haben nicht mehr als 8 CPUs pro NUMA-Knoten, daher gilt das Trace-Flag 8048 nicht.
  • Die größten Instanzwartezeiten sind CXPACKET(70%), dann PREEMPTIVE_OS_PIPEOPS(20%)
  • cost threshold for parallelismist auf 50 eingestellt. Soll ich es erhöhen? Zu was?
  • Dies ist eine physische Maschine (keine VM), die für SQL Server reserviert ist.
  • Ich verwende ein Überwachungstool, um die am häufigsten ausgeführten Abfragen und Verfahren zu identifizieren. Möchte ich eine hohe CPU, eine hohe E / A oder eine hohe Dauer betrachten? Normalerweise ist unsere App E / A-intensiv, daher stelle ich hohe E / A ein. Aber da das Problem Signalwartezeiten ist, muss ich mir die hohe CPU ansehen?
  • Ich hatte gehofft, Max Vernons Empfehlung zu vermeiden , MAXDOPauf 4 zu senken , da die App einige Abfragen im Warehouse-Stil ausführt, für die zusätzliche Threads erforderlich sind.
Chris Woods
quelle
Danke Aaron! Ich werde nach Abfragen mit hoher Dauer und niedriger CPU suchen.
Chris Woods

Antworten:

2

Community Wiki Antwort generiert aus Kommentaren zu der Frage von Aaron .

Sofern Sie keine Leistungsprobleme haben, ist der hohe Prozentsatz an CXPACKETWartezeiten möglicherweise nur ein Indikator dafür, dass ein großer Teil der Abfragen parallel verläuft und eigentlich kein Problem darstellt.

Eine hohe CPU könnte ein Indikator sein, aber von dem, was Sie erklärt haben, würde ich sagen, dass Sie sich Abfragen mit langer Dauer, aber zunächst niedriger CPU ansehen sollten. Das CXPACKETWarten ist manchmal mit einer Abfrage verbunden, die darauf wartet, dass alle Threads beendet sind, bevor die Ergebnisse zusammengeführt werden können (Datenversatz).

Wenn Sie in der Lage sind, die Abfragen und Prozeduren zu ändern, können Sie MAXDOPfür die benötigten Lageraufgaben eine höhere und für die globale MAXDOPniedrigere eine niedrigere festlegen . Ich würde das jedoch nur als letzten Ausweg tun. Sie möchten diese Arten von expliziten Hinweisen nur dann wirklich machen, wenn Sie alle Möglichkeiten ausgeschöpft haben oder keine Änderungen am Code, den Abfragen oder den Datenbankschemata vornehmen können.

Paul White
quelle