Begrenzen Sie die maximale CPU-Auslastung von SQL Server mit WSRM

10

Ich habe einen physischen Server, auf dem eine Instanz von SQL Server ausgeführt wird.

Ich stelle fest, dass dieser Server ziemlich oft mit 100% CPU-Auslastung läuft.

Mein IT-Team ist darüber nicht erfreut und schlug vor, 2 der 32 Kerne für das Betriebssystem zu reservieren.

Dies funktioniert hervorragend, jetzt liegt die maximale Nutzungsspitze bei knapp 90%. Außerdem wird kein langsamer Datenabruf von verschiedenen Benutzern mehr gemeldet.

Gibt es einen Grund, WSRM (Windows System Resource Manager) NICHT auf diese Weise zu verwenden - anstelle von SQL Resource Governor?

ManInMoon
quelle
Möchten Sie wirklich die gesamte CPU nutzen? Das Speichern einiger Kerne für das Betriebssystem erscheint umsichtig, nicht wahr? Wenn ich auf meiner Workstation alle Kerne für eine bestimmte Anzahl von Knirschen verwende, kommt meine Maschine zum Stillstand. Ich halte immer ein paar Kerne frei. Wäre dies nicht eine gute Vorgehensweise auf einem Computer, der auch für SQL Server vorgesehen ist?
ManInMoon
Welche Art von Last wird auf diesem Server ausgeführt? Welche Art von Prozess verwendet 100% der CPU? Ist das OLTP oder Analytics oder Graph oder?
Max Vernon
@Forrest Wenn Sie Tuning sagen - meinen Sie den SQL Server selbst - oder die Abfragen / Tabellenstruktur? Wenn Sie SQL Server meinen, geben Sie mir bitte einen Link zu dem, was Sie sich ansehen sollen. Wenn Queiries / Tische, dann optimiere ich sie, wenn ich kann, aber einige Benutzer sind weniger designbewusst!
ManInMoon

Antworten:

14

Gibt es einen Grund, den von Ihnen definierten Ansatz NICHT zu verwenden? Absolut.

Stellen Sie sich vor, Sie hätten ein Auto gekauft - ein Auto, bei dem der Motor überhitzt, wenn Sie 50 MPH erreichen. Wäre Ihre Reaktion auf diese Situation, das Auto künstlich auf 49 MPH zu begrenzen oder herauszufinden, was der Fehler am Motor ist?

Warum sollten Sie Ihr Auto auf 49 MPH beschränken? Der Hersteller gab an, dass es bis zu 80 MPH fahren könnte - Sie fahren Ihr Auto gerne schnell, um es auf diese Geschwindigkeit zu bringen -, wenn es dieses verdammte Überhitzungsproblem nicht gäbe.

Das Auto, das Sie gekauft haben, war auch sehr, sehr teuer. Jeder Motorzylinder muss maximal ausgelastet sein, damit Sie dieses Geld nicht verschwenden!

Durch die künstliche Einschränkung des Zugriffs von SQL Servern auf die CPU wird die Leistung beeinträchtigt. Möglicherweise haben Sie die Leistungsprobleme vorübergehend behoben, indem Sie sichergestellt haben, dass die CPU für das Betriebssystem verfügbar ist, aber Sie haben die eigentliche Frage nicht beantwortet: WARUM verwendet SQL Server 100% der CPU?

Mein Rat lautet wie folgt:

Finden Sie heraus, was das eigentliche Problem ist, und beheben Sie es. Vertuschen Sie das Problem nicht mit einem Kludge. Das Problem WILL wieder und schlagen Sie in dem Gesicht der ganzen Linie , wenn die Auslastung des Servers natürlich mit einem Wachstum erhöht.

Als vorübergehende Lösung kann der Resource Governor verwendet werden, um die verwendete CPU zu senken, bis Sie das echte Problem finden.

George.Palacios
quelle
11

Erik Darling erwähnte den größten praktischen Grund für die Nichtverwendung von WSRM in einem Kommentar zu Ihrer Frage:

... gibt es keine gegenseitige Einschränkung der CPU-Auslastung in anderen Prozessen. SQL Server verwendet diese beiden Kerne möglicherweise nicht, aber andere Dinge verwenden möglicherweise die anderen 30 Kerne, die SQL Server verwendet. Es ist wirklich ein Crapshoot.

Wenn dies für Sie funktioniert, bleiben Sie dabei - wir sind alle beschäftigt, und Sie können nur so viel Zeit mit einem bestimmten Problem verbringen. Die ideale Lösung wäre, die zugrunde liegenden Abfragen / Probleme zu beheben, die die CPU so weit treiben, dass vom Benutzer wahrnehmbare Probleme auftreten (die George in seiner hervorragenden Antwort behandelt ).

Erik fährt fort zu sagen

Außerdem zahlen Sie für sie die SQL Server-Lizenz.

Aus geschäftlicher Sicht ist dies wahrscheinlich der schlechteste Teil des WSRM-Geschäfts - Sie zahlen eine Lizenz pro Kern für zwei Kerne, die ausdrücklich nicht verwendet werden. Zum Zeitpunkt dieses Schreibens sind das noch $ 3k oder $ 14k auf dem Tisch (abhängig von Standard vs Enterprise).

Josh Darnell
quelle