Hier ist viel los, und das meiste ist ziemlich breit und vage.
2008R2 RTM wurde am 21. April 2010 veröffentlicht. Sie sollten vorrangig auf das neueste Service Pack zugreifen, das vor etwa drei Jahren auf den Markt kam. Auf diese Weise werden Sie abgedeckt, wenn Sie einen seltsamen Fehler oder etwas treffen. Gehen Sie hierher, um herauszufinden, was Sie herunterladen müssen.
Da Sie vCPUs (von 1 bis 4) hinzugefügt und keine Einstellungen geändert haben, können Ihre Abfragen jetzt parallel ausgeführt werden. Ich weiß, das hört sich so an, als wären sie alle schneller, aber warte!
Möglicherweise haben Sie RAM hinzugefügt, aber möglicherweise nicht den maximalen Serverspeicher geändert, damit Ihr Server davon Gebrauch machen kann.
Finden Sie heraus, worauf Ihr Server wartet. Ein Open-Source-Projekt, an dem ich arbeite, stellt kostenlose Skripte zur Verfügung, mit denen Sie Ihren SQL Server messen können. Kommen Sie hierher, wenn Sie es versuchen wollen.
Greifen Sie zu sp_BlitzFirst, um die Wartestatistiken Ihres Servers zu überprüfen. Sie können es auf verschiedene Arten ausführen.
Dies zeigt Ihnen, worauf Ihr Server seit dem Start gewartet hat.
EXEC dbo.sp_BlitzFirst @SinceStartup = 1;
Dies zeigt Ihnen in einem 30-Sekunden-Fenster, worauf Abfragen jetzt warten.
EXEC dbo.sp_BlitzFirst @Seconds = 30, @ExpertMode = 1;
Sobald Sie herausgefunden haben, worauf Abfragen warten (es gibt eine Menge Informationen zu Wartestatistiken), können Sie Änderungen vornehmen, um die Dinge unter Kontrolle zu bringen.
Wenn Sie sehen CXPACKET
, dass sie warten , bedeutet dies, dass Ihre Abfragen parallel verlaufen und sich möglicherweise überschlagen. Wenn Sie diese Option auswählen, sollten Sie den Kostengrenzwert für Parallelität möglicherweise auf 50 erhöhen und MAXDOP möglicherweise auf 2 senken.
Nach diesem Schritt können Sie beispielsweise sp_WhoIsActive oder sp_BlitzWho (letzteres ist im GitHub-Repo von früher enthalten) zum Erfassen von Abfrageplänen verwenden. Abgesehen von Wartestatistiken sind sie eines der wichtigsten Dinge, die Sie sich ansehen können, um herauszufinden, was falsch läuft.
Vielleicht möchten Sie auch diesen Artikel von Jonathan Kehayias über VMWare-Zähler lesen , um ihn in Bezug auf SQL Server zu lesen .
Aktualisieren
Das Überprüfen der Wartestatistiken und des Jungen sind sie sonderbar. Bei den CPUs ist definitiv etwas los. Ihr Server sitzt meistens gelangweilt herum, aber wenn es heiß hergeht, wird es schlimm. Ich werde versuchen, dies leicht zu brechen.
Sie treffen eine Giftwartezeit genannt THREADPOOL
. Sie haben nicht viel davon, aber das macht Sinn, weil Ihr Server nicht besonders aktiv ist. Ich erkläre gleich warum.
Sie haben wirklich lange durchschnittliche Wartezeiten auf SOS_SCHEDULER_YIELD
und CXPACKET
. Sie befinden sich auf einer VM und möchten sicherstellen, dass der SQL Server Reservierungen hat oder dass die Box nicht schrecklich überzeichnet ist. Ein lauter Nachbar kann Ihren Tag hier wirklich ruinieren. Sie sollten auch sicherstellen, dass der Server / VM-Gast / VM-Host nicht im ausgeglichenen Stromversorgungsmodus ausgeführt wird. Dadurch werden Ihre CPUs auf unnötig niedrige Geschwindigkeiten heruntergefahren und nicht sofort wieder auf die volle Geschwindigkeit hochgefahren.
Wie binden sie ein? Mit 4 CPUs haben Sie 512 Worker-Threads. Denken Sie daran, Sie hatten dieselbe Menge mit einer einzelnen CPU, aber jetzt, da Ihre Abfragen parallel ausgeführt werden können, können sie viel mehr Arbeitsthreads verbrauchen. In Ihrem Fall 4 Threads pro parallelem Zweig einer parallelen Abfrage.
Was läuft parallel? Höchstwahrscheinlich alles. Die Standardkostenschwelle für Parallelism ist 5. Diese Zahl die Standardirgendwann in den späten 90er Jahren gemacht wurde auf einem Desktop arbeiten , dass sah wie folgt aus .
Zugegeben, Ihre Hardware ist kleiner als die der meisten Laptops, aber Sie sind der Sache immer noch ein Stück voraus.
Wenn viele parallele Abfragen gestartet werden, gehen Ihnen diese Arbeitsthreads aus. In diesem Fall warten Abfragen nur darauf, dass die Threads gestartet werden. Das ist auch der SOS_SCHEDULER_YIELD
Punkt, an dem Abfragen die CPUs verlassen und lange nicht mehr weiterarbeiten. Ich sehe keine blockierenden Wartezeiten, daher sind Sie höchstwahrscheinlich nur überlastet, wenn es um abfrageinterne Parallelitätswarten geht.
Was kannst du tun?
- Stellen Sie sicher, dass sich nichts im Modus für ausgeglichene Stromversorgung befindet
- Ändern Sie MAXDOP in 2
- Ändern Sie den Kostenschwellenwert für Parallelität auf 50
- Befolgen Sie den obigen Artikel von Jon K., um den VM-Zustand zu überprüfen
- Verwenden Sie das aufgerufene Skript
sp_BlitzIndex
, um nach fehlenden Indexanforderungen zu suchen.
Weitere Informationen zur Fehlerbehebung finden Sie in dem Whitepaper, das ich für Google zum Thema Hardwaredimensionierung in der Cloud geschrieben habe.
Hoffe das hilft!