AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MSSQL-Server - Wie CPU-Last analysieren?

MSSQL-Server - Wie CPU-Last analysieren?

Ein Thema von Dalai · begonnen am 26. Jul 2019 · letzter Beitrag vom 30. Jul 2019
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.337 Beiträge
 
Delphi 5 Professional
 
#1

MSSQL-Server - Wie CPU-Last analysieren?

  Alt 26. Jul 2019, 17:15
Datenbank: MSSQL • Version: 2017 • Zugriff über: egal
Hallo Leute .

In diesem Thema geht es nicht um Programmierung mit MSSQL sondern um den MSSQL-Server selbst. Das Datenbank-Unterforum passt IMO trotzdem am besten; wenn nicht, dann bitte einfach verschieben.

Da ich weiß, dass einige Leute mit Datenbank-Erfahrung hier im Forum unterwegs sind - darunter bestimmt auch welche, die sich mit MSSQL auskennen, poste ich hier. [Crosspost bei Planet3DNow]

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.

[Hinweis: Bilder sind extern gelagert, weil DP nur 5 Dateien pro Post zulässt. Dummerweise werden offenbar auch IMG Tags weggefiltert, so dass es hier keine Thumbnails gibt.]
Graphen aus Munin for Windows:
processor by day (leicht unterschiedliche Skalierung)
Bild "processor-day_2019-075ok5v.png" anzeigen.
Bild "processor-day_2019-07h6j3t.png" anzeigen.
Bild "processor-day_2019-07qlk17.png" anzeigen.
processor by month
Bild "processor-month_2019-8kk1h.png" anzeigen.
Bild "processor-month_2019-mij5a.png" anzeigen.
Bild "processor-month_2019-ssksh.png" anzeigen.
Die Lastspitzen werden durch das zweimal wöchentliche Backup der MSSQL-DBs erzeugt.

Screenshots von ProcessHacker:
Bild "processhacker-generalepji2.png" anzeigen.
Bild "processhacker-performdwjny.png" anzeigen.
Bild "processhacker-statist6nkcm.png" anzeigen.
Bild "processhacker-threadsfsjrx.png" anzeigen.
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

Geändert von Dalai (26. Jul 2019 um 17:21 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.600 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 26. Jul 2019, 19:41
Für jetzt und später:
Ich habe keine aktuelle, praktische Erfahrung mit MSSQL Servern.

Die Screenshots habe ich überflogen.
1. Problematik:
Ist sicher, dass der sqlserver die Last verursacht?
Bzw. welches der anderen genannten Programme (das ERP ist naheliegend) hat Zugriff auf den Server?


Idee:
moderne Datenbanken sind sehr bemüht, performant zu sein und zwar jederzeit und egal, was die Entwickler oder Admins für einen Blödsinn machen.
Moderne Datenbanken teilen sich in 2 Welten, bezahlte und unbezahlte.
Es gibt sehr gute unbezahlte Datenbanken, also warum Geld bezahlen?
Weil die bezahlten Systeme sich selbst optimieren.

An der Stelle würde ich anfangen zu suchen.
Selbstoptimierung einer DB hat meinetwegen mit smarten Optimizern angefangen und mit Statistiken über den Datenbestand. Das ist lange her.
Heute werden Profiles angelegt, Quotas gebastelt und ständig analysiert. Welches Statement läuft wie gut und vor allem, wann treten welche Lasten auf?
Gerne z.B. gemäß menschlicher Gewohnheit, tags wird gearbeitet und nachts geschlafen, ein idealer Zeitpunkt für eine DB, aufzuräumen, zu löschen, etc.
Einfacher, es gibt Businessabläufe, die zu bestimmten Tageszeiten bestimmte Fähigkeiten erfordern. Viele Daten löschen ist eine andere Anforderung als Replikate abgleichen oder Massenimport. Darauf stellen sich teure Systeme ein, zumindest bieten sie die Möglichkeit und dafür müssen sie selbst analysieren.
Gruß, Jo

Geändert von jobo (26. Jul 2019 um 19:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.337 Beiträge
 
Delphi 5 Professional
 
#3

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 26. Jul 2019, 21:19
1. Problematik:
Ist sicher, dass der sqlserver die Last verursacht?
Die Screenshots vom ProcessHacker zeigen das eindeutig, und ein Neustart des MSSQL lässt die Last sofort verschwinden.

Zitat:
Bzw. welches der anderen genannten Programme (das ERP ist naheliegend) hat Zugriff auf den Server?
Das ERP ist das einzige, was den MSSQL nutzt. Der Punkt ist, dass es zwei Wochen läuft, und dann geht innerhalb weniger Stunden die Last hoch. Das ERP wird unabhängig davon wochentags durch mehrere Leute benutzt.

Zitat:
Es gibt sehr gute unbezahlte Datenbanken, also warum Geld bezahlen?
Weil die bezahlten Systeme sich selbst optimieren.
Eine ständige CPU-Last, selbst wenn das ERP (und damit der SQL) nicht benutzt wird, werte ich keinesfalls als Optimierung sondern genau als Gegenteil.

Zitat:
Gerne z.B. gemäß menschlicher Gewohnheit, tags wird gearbeitet und nachts geschlafen, ein idealer Zeitpunkt für eine DB, aufzuräumen, zu löschen, etc.
Nur um nochmal die Graphen in Worte zu fassen: Die Last ist permanent und ziemlich konstant. Es gibt da keine Zyklen.

Mir geht es primär darum, wie und womit ich die Last analysieren kann, um herauszufinden, wodurch sie verusacht wird. Wenn sich herausstellt, dass es am ERP liegt, dann ist das halt so (und der o.g. Workaround wird benutzt werden).

Aufgrund der Zeitdauer von zwei Wochen bis zum Auftreten der Last kann ich auch nicht einfach eine VM aufsetzen, auf der nur der MSSQL installiert wird (und kein ERP), und den laufen lassen; abgesehen davon habe ich aktuell keine dafür geeignete Hardware.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
898 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 26. Jul 2019, 22:36
Hallo,

das wird's vermutlich nicht sein, aber ist ein Wartungsplan eingerichtet?
Wir richten diesen eigentlich immer ein und führen dann wöchentlich/ monatlich die vorgegebenen Wartungen durch.

Evtl. hilft dir sowas weiter?
Es gibt wohl eine Testversion.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.337 Beiträge
 
Delphi 5 Professional
 
#5

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 26. Jul 2019, 23:36
das wird's vermutlich nicht sein, aber ist ein Wartungsplan eingerichtet?
Soweit ich das im SQL Management Studio unter Verwaltung > Wartungspläne sehe, ist da nichts definiert. Der SQL Server Agent ist außerdem deaktiviert; IIRC müsste der laufen, damit die Wartungspläne ausgeführt werden. Das Backup der DBs erfolgt nicht per Wartungsplan sondern per Skript, das in der Windows-Aufgabenplanung definiert ist.

Zitat:
Evtl. hilft dir sowas weiter?
Leider hab ich meine Zweifel. Der Aktivitätsmonitor im MSSQL MS war ja bereits ein Reinfall. Alles, was dort als abfrage-/CPU-intensiv zu sehen war, waren die Abfragen des Aktivitätsmonitors selbst sowie alle 5 (oder 10) Minuten das Abholen von eMails durch das ERP. Sicherlich werden Drittanbieter Performance-Analysetools weiter ins Detail gehen, aber ob das wirklich hilft? 14 Tage Testzeitraum ist auch nicht gerade hilfreich bei dieser Art von Problem...

Bislang hat sich auch noch keiner über die Performance des MSSQL beschwert. Dummerweise ist der Anbieter des ERP bislang keine Hilfe bei der Analyse; mein Eindruck ist, die nehmen den MSSQL so wie er ist und kümmern sich nicht weiter. Wobei ich nicht weiß, ob die Installation des ERP mehr als nur DBs im MSSQL anlegt und mit Demodaten befüllt; mit anderen Worten, es ist unklar, ob es irgendwelche Einstellungen am MSSQL vornimmt.

Versteht mich nicht falsch. Ich bin dankbar für jede Art von Hilfe. Aber auf gut Glück mit irgendeiner DB Performance-Analyse-Software rumspielen, ohne Ahnung, wonach ich suchen soll, ist nicht so mein Ding. Ich administriere den MSSQL nur, ich hab noch nie damit gearbeitet oder sonst Ahnung davon.

[EDIT]
Will sagen: Mir müsste schon jemand (der Ahnung hat) sagen, womit und wo ich gucken soll bzw. was ich genau tun soll, um dem Problem auf die Spur zu kommen.
[/EDIT]

Grüße
Dalai

Geändert von Dalai (27. Jul 2019 um 00:22 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.600 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 27. Jul 2019, 06:10
[EDIT]
Will sagen: Mir müsste schon jemand (der Ahnung hat) sagen, womit und wo ich gucken soll bzw. was ich genau tun soll, um dem Problem auf die Spur zu kommen.
[/EDIT]

Grüße
Dalai
Sorry, zu spät gelesen.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.093 Beiträge
 
Delphi 7 Professional
 
#7

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 27. Jul 2019, 12:35
Gibt es da eventuell für Dich hilfreiche Information? How to Monitor SQL Server

Kannst Du eventuell über dashier CPU and memory utilization within the date and time given an weitere, für Dich relevante, Informationen kommen?

Da ich keine Ahnung vom MSSQL-Server habe, würd' ich, wenn ich so wie Du vor 'nem Administrationsproblem stehe, so eine Abfrage bei Google machen Bei Google suchenmssql cpu last 2 weeks usage und versuchen, mir daraus irgendwie was wissenswertes zusammenzusuchen und dann daraus ggfls. 'ne eigene Lösung bauen.

Ja, ich weiß, dass das sehr aufwändig werden kann, musste aber zu meiner Administratorzeit öfter auf diesem oder ähnlichem Weg Problemlösungen für diverse Systeme finden. Nein, spaßig ist das nicht

Irgendetwas, das klar sagt: "Mache dieses oder jenes", hab' ich leider nicht finden können
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.337 Beiträge
 
Delphi 5 Professional
 
#8

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 27. Jul 2019, 18:08
OK, danke. Das wird eine Weile dauern, das durchzugehen. Wusste bisher nicht, dass im Windows Performance Monitor auch Quellen vom MSSQL zu finden sind. Ich kann jetzt schon sagen, dass sowohl Ereignisprotokoll als auch Errorlog des MSSQL sauber sind (da hab ich natürlich zuerst geschaut).

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.390 Beiträge
 
Delphi 7 Personal
 
#9

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 28. Jul 2019, 12:12
Zunächst auch ich habe keine direkte Erfahrung mit dem SQL-Server.
Unsere DB-Admins haben für die in DE-Gehosteten Datenbanken immer einen Neustart von 3.00 bis 4.00 in den Verfügbarkeitspänen gehabt. Enzig die DBs die auch für Ostasien verfügbar sein mußten hatten ihren Restart gegen 8.00 was aber nur zähneknirschend akzeptiert wurde. Soweit ich weiß benötigt die DB einen Neustart um die erarbeiteten Optimierungen dauerhaft verfügbar zu haben, was aber von DB zu DB unterschiedlich ist. Ich meine auch einmal gehört zu haben, daß es DB(Konfigurationen) gibt die 247-taglich sind, was aber durch den Parallelbetrieb von zwei phys.DB erreicht wird.

Aber wie gesagt, nimm es als Anregung in welcher Richtung Du nachschauen mußt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
543 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: MSSQL-Server - Wie CPU-Last analysieren?

  Alt 28. Jul 2019, 14:24
Wie unten schon erwähnt, schau dir im Windows Performance Monitor an, woher die Last, die der SQL Server erzeugt, tatsächlich herkommt.
Siehe auch hier: https://www.mssqltips.com/sqlservert...or-sql-server/

Konzentriere dich nicht nur auf die Kennzahlen des SQL Servers, sondern nimm den Server selbst auch dazu.

Dann weißt du, in welchem Bereich du weitersuchen musst.

BTW: Was für eine Hardware und welche Versionsstände sind denn das?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf