HINTERGRUND Ich habe kürzlich einige ziemlich hohe CXPacket-Wartezeiten untersucht, bei denen ich SQL Sentry verwendet habe, um die Prozessoraktivität ziemlich genau zu überwachen.
Eine Sache, die mir als Ergebnis aufgefallen ist, ist, dass wir massive Spitzen beim Kontextwechsel haben. Unten finden Sie eine 5-minütige Probe, aber dieses Muster ist den ganzen Tag über sehr verbreitet.
Wie Sie sehen können, spitzt es ziemlich regelmäßig. Jetzt würde mein Verständnis davon mich glauben lassen, dass dies das Ergebnis des CPU-Drucks sein würde. In dieser Zeit jedoch kaum mehr als 60%.
Nach einigen Recherchen kam ich zu der Annahme, dass dies auf Hyper-Threading zurückzuführen ist. Ich weiß, dass ich früher einige der Gefahren von Hyper-Threading gelesen habe . Das wurde jedoch schon vor langer Zeit geschrieben.
Um es kurz zu machen. Ist Hyper-Threading wahrscheinlich der Schuldige für diese Spitzen beim Kontextwechsel? Ist es möglich, dass sich das Umschalten des Kontexts negativ auf meine parallelen Abfragen auswirkt? Sollte ich Hyper-Threading in meiner Umgebung deaktivieren?
UPDATE Obwohl diese spezielle Sache in meiner Umgebung passiert, ist die Frage im Kern universeller. Wie effektiv kann ein hohes Maß an Kontextumschaltung bei parallelen Abfragen sein? Kann Hyper-Threading diese Art von Problem verursachen?
Letztendlich deutet das meiste, was ich im Internet finde, darauf hin, dass Hyper-Threading und SQL Server keine guten Freunde sind, aber die meisten Informationen sind extrem veraltet.
Mein System Es gab viele Konfigurationsfragen, daher werde ich diese hier beantworten, damit sie ausgeschlossen werden können. Wir haben die Leistungseinstellungen für die Leistung sowohl auf Betriebssystem- als auch auf Bioebene. Unser Maxdop ist auf 8 eingestellt und der Kostenschwellenwert für Parallelität liegt bei 25. Wir haben 32 logische und 16 physische Kerne. Auch dies ist größtenteils ein Data Warehouse-Ladeszenario.
Antworten:
Zeigt oft nichts weiter an, als dass bestimmte Abfragen parallel ausgeführt werden. CXPACKET-Wartezeiten auf dem Server sind kein unmittelbares Anzeichen für Probleme, obwohl sie möglicherweise das Symptom eines anderen Problems sind.
Wenn der Server ein Data Warehouse oder einen Berichtstyp einer Datenbank hostet, der ein geringes Abfragevolumen empfängt, aber große Datenmengen verarbeitet, kann die Parallelität die Zeit für die Ausführung dieser Abfragen erheblich verkürzen. Wenn der Server jedoch eine OLTP-Datenbank mit vielen kleinen Abfragen und Transaktionen hostet, kann Parallelität den Durchsatz beeinträchtigen und die Leistung beeinträchtigen.
Wann immer möglich, ist es am besten, den zugrunde liegenden Wartetyp zu isolieren und Fehler zu beheben, da dies zu Verbesserungen des Gesamtsystemdurchsatzes führt. Auch hier sind die CXPACKET-Wartezeiten in den meisten Fällen lediglich ein Symptom für ein Problem, nicht das eigentliche Problem
Die DMV sys.dm_os_latch_stats enthält Informationen zu den spezifischen Latch-Wartezeiten, die in der Instanz aufgetreten sind. Wenn eine der obersten Latch-Wartezeiten ACCESS_METHODS_DATASET_PARENT in Verbindung mit CXPACKET, LATCH_ * und SOS_SCHEDULER_YIELD ist, werden die Wartetypen als oberste Wartezeiten verwendet Parallelität auf dem System ist die Ursache für Engpässe bei der Ausführung von Abfragen. Zur Behebung der Probleme kann eine Reduzierung der Option sp_configure "Maximaler Parallelitätsgrad" erforderlich sein.
Dieser Artikel im TechNet Magazine ist alt, aber es heißt, Sie sollten versuchen, das Hyperthreading auszuschalten, wenn Sie die 5000 pro Sekunde pro Prozessor überschreiten:
Optimieren der SQL Server-CPU-Leistung von Zach Nichter
quelle