2012 MSSQL-Server - Wie CPU-Last analysieren?

Dalai

Grand Admiral Special
Mitglied seit
14.06.2004
Beiträge
7.420
Renomée
262
Standort
Meiningen, Thüringen
Hallo Leute :).

In der Hoffnung, dass sich hier im Forum MSSQL-Experten rumtreiben, wende ich mich an euch. [Crosspost in der DelphiPraxis]

Vorab einige Infos zur Hard- und Software des fraglichen Systems:
AMD Epyc 7261
SuperMicro H11SSL-C
32 GiB RAM
Windows Server 2012 R2
MSSQL Server 2017 (mit CU12)
IIS
ERP-System, das auf Basis von .NET, IIS und MSSQL arbeitet
Hinweis: Das System hat bis auf zwei Domains keinen Internetzugang.

Das Problem stellt sich wie folgt dar: Nach ziemlich genau zwei Wochen Laufzeit des MSSQL-Servers verdoppelt sich die CPU-Last durch den SQL-Server-Prozess und das ändert sich auch mit längerer Laufzeit nicht mehr. Nun wäre ein möglicher Workaround, den MSSQL jedes Wochenende neu zu starten, aber ich würde gern versuchen, herauszufinden, was genau die CPU-Last verursacht.

Graphen aus Munin for Windows:
processor by day (leicht unterschiedliche Skalierung)
processor-day_2019-07-07.pngprocessor-day_2019-07-10.pngprocessor-day_2019-07-26.png
processor by month
processor-month_2019-07-07.pngprocessor-month_2019-07-10.pngprocessor-month_2019-07-26.png
Die Lastspitzen werden durch das zweimal wöchentliche Backup der MSSQL-DBs erzeugt.

Screenshots von ProcessHacker:
ProcessHacker - General_blurred.pngProcessHacker - Performance.pngProcessHacker - Statistics.pngProcessHacker - Threads.png
Hier sieht man, dass sqlservr.exe permanent ~0,11% Last verursacht; aktuell sind es 0,15%. Nach einem Neustart des MSSQL ist dieser Wert - wie gesagt für zwei Wochen - irgendwo deutlich unter 0,05, IIRC meist 0,01%.
Außerdem ist ein hohes Cycles delta von ~40 Millionen für einen Thread erkennbar, bei einem Aktualisierungsintervall von 1 Sekunde; ich hab auch schon Cycles deltas von ~60 Millionen gesehen.

Der Aktivitätsmonitor im MSSQL Management Studio war keinerlei Hilfe, denn die sichtbaren lastverursachenden SQL-Statements waren nur die vom Aktivitätsmonitor selbst :].

Nun könnte man natürlich sagen: "Was regt man sich über 1% CPU-Last auf", aber ich halte das Verhalten für nicht normal, wenn es zwei Wochen lang ohne diese Last funktioniert.

Gibt's unter den Lesern jemanden, der sich mit MSSQL auskennt und mir Tips geben kann, wie und wo man das anfangen kann zu analysieren?

Grüße
Dalai
 
Zuletzt bearbeitet:
Datenbanken tun einiges im Hintergrund abhängig vom Füllgrad der Tabellen oder Indices.
Da werden Zähler aktualisiert, Füllstände aktualisiert, fragmentierte Records bereinigt, Systemtabellen aktualisiert, Tabellen reindiziert, Statistiken angelegt, etc ppp.
Alles viele Gründe warum auf einem Datenbankserver permanent was los ist.
Geschwätzige, eierlegende Wollmilchsäue wie MS$SQL oder Oracle tun viel mehr als man denkt.
 
Zuletzt bearbeitet:
Hast du einen Ansatz einer Erklärung, warum das erst nach 2 Wochen Laufzeit auftritt?

Grüße
Dalai
 
Der Füllgrad und die Lebensdauer der Daten. Nach einer Zeit fängt der Server im Hintergrund zu arbeiten an. Es gibt keine Zeit wo der Server nichts im Hintergrund macht.
 
Zurück
Oben Unten