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.