lazkopat85
Goto Top

Performanceprobleme mit SQL Server

Hallo,

ich bin eigentlich Anwendungsentwickler, habe aber die Administration zwnagsweise von meinem Vorgänger in der Firma übernommen. Wir haben einen MS SQL Server im Haus.
Auf bestimmte Tabellen greifen 20 Benutzer gleichzeitig zu. Das klappt auch eigentlich sehr gut. Ein neuer Kollege führt jetzt aber komplexe Abfragen auf die Tabelle aus die zeitweise die Tabelle ganz blockiert. Die 20 Benutzer bekommen einen Timeout bei einfachen Zugriffen. Die Auslastung der Prozessoren steigen auf 100%.

Kann mir jemand einen Tipp geben wie ich das Problem lösen kann? Würde hier eine Virtualisierung weiterhelfen? Mir fehlt leider die Praxiserfahrung.

Content-ID: 326210

Url: https://administrator.de/contentid/326210

Ausgedruckt am: 24.11.2024 um 12:11 Uhr

em-pie
Lösung em-pie 12.01.2017 aktualisiert um 22:47:51 Uhr
Goto Top
Moin,

die Gründe können vielseitig sein..

Aber fangen wir mal an eine Ist-Aufnahme durchzuführen, in dem du folgende Fragen beantwortest:

  • Welches Betriebssystem?
  • Betriebssystem virtualisiert?
  • Wieviel RAM hat das Betriebssystem?
  • Wie viele CPUs hat das OS?
  • Auf was für einem Datenträgerverbund liegt die DB (RAID1, 10, 5, 6,...)?
  • Welche Datenträger sind dem Verbund angehörig (HDD, SSD)?
  • Welchen Schnittstellentyp haben die Datenträger (SAS, SATA I, SATA II,SATA III, IDE, SCSI)?
  • Hängt ggf. ein Storage-Hypervisor zwischen (z.B. DataCore, IBMs SVC, ...)?
  • Sind die Platten im Host selbst verbaut oder über ein SAN (FibreChannel, iSCSI, ...) angebunden?
  • welcher MS SQL-Server?


Und ein Faktor könnte für die langsame / auslastende Abfrage sein:
Indizes auf den Tabellen falsch gesetzt, sodass der User bei einer komplexen Abfrage die DB damit beschäftigt, die Verknüpfungen / Joins zwischen verschiedenen Tabellen über nicht indizierte / indexierte Felder aufzubauen...

Gruß
em-pie
lazkopat85
lazkopat85 12.01.2017 um 23:13:55 Uhr
Goto Top
Hallo,

erstmal danke für die Rückinfo. Hier die Antworten


Welches Betriebssystem? WIndows Server 2008 R2
Betriebssystem virtualisiert? Nein
Wieviel RAM hat das Betriebssystem? 64 GB
Wie viele CPUs hat das OS? 2 CPUs a 16 kerne
Auf was für einem Datenträgerverbund liegt die DB (RAID1, 10, 5, 6,...)? raid1
Welche Datenträger sind dem Verbund angehörig (HDD, SSD)?
Welchen Schnittstellentyp haben die Datenträger (SAS, SATA I, SATA II,SATA III, IDE, SCSI)? SAS Hotplug
Hängt ggf. ein Storage-Hypervisor zwischen (z.B. DataCore, IBMs SVC, ...)? Nein
Sind die Platten im Host selbst verbaut oder über ein SAN (FibreChannel, iSCSI, ...) angebunden? im Host selbst
welcher MS SQL-Server? Microsoft SQL 2008
Pjordorf
Pjordorf 13.01.2017 um 00:07:29 Uhr
Goto Top
Hallo,

Zitat von @lazkopat85:
Wie viele CPUs hat das OS? 2 CPUs a 16 kerne
Mainboard ist ein Serverboard oder Desktopboard?
CPUs sind was (Xeon, E3, E5, E7...)?
RAIDKontroller onboard oder Steckkarte?
RAIDKontroller ist welcher genau?
BBU?
SAS 7200 oder 10k oder 15k Platten?
Datenbanken und LOG Dateien auf gleicher Platte (Spindel) oder getrennt?
Netzwerkkarte GBit/s, eine oder mehrere, Teaming oder so, Intel oder was?
Was macht der Server noch?
Werden alle Kerne auf 100% gebracht oder nur einer oder einer pro CPU?
Welche Optimierung habt ihr eurem SQL gedöhns denn gegönnt oder einfach alles nur Stumpf installiert und so genutzt?
Welcher teil der SQL Abfragen eures neuen Benutzers legt denn das Plattensytem lahm oder reizt den RAM aus oder braucht von beiden CPUs 100%?
Welche Datenträger sind dem Verbund angehörig (HDD, SSD)?

Gruß,
Peter
ukulele-7
ukulele-7 13.01.2017 um 08:28:10 Uhr
Goto Top
Die Frage nach der Hardware ist nicht unberechtigt aber wenn alle Abfragen performant laufen und nur eine Killerabfrage das ganze System auslastet dann ist vermutlich auch diese eine Abfrage ursächlich.

Jetzt kann es sein das sie entweder schlecht geschrieben ist, mit EXPLAIN und ggf. ein paar Indexen beschleunigt werden kann oder das sie wirklich der DB viel abverlangt. Letzteres ließe sich mit einem dicken neuen Server sicherlich verbessern oder auch mit einem 2ten Server und einer Kopie der Daten, ich tippe aber zunächst mal auf Ersteres.
lazkopat85
lazkopat85 13.01.2017 um 09:00:07 Uhr
Goto Top
Mainboard ist ein Serverboard oder Desktopboard? Server
CPUs sind was (Xeon, E3, E5, E7...)? XENON E5 2640 v2 2GhZ
RAIDKontroller onboard oder Steckkarte? Onboard
SAS 7200 oder 10k oder 15k Platten? 10K
Datenbanken und LOG Dateien auf gleicher Platte (Spindel) oder getrennt? OS auf einer Platte; DBs und Logs auf der anderen
Netzwerkkarte GBit/s, eine oder mehrere, Teaming oder so, Intel oder was? 1x GBit
Was macht der Server noch? Nur SQL
Werden alle Kerne auf 100% gebracht oder nur einer oder einer pro CPU? Alle Kerne werden auf 100% gebracht

Es ist ein Server von DELL POWEREDGE R620. Ich werde mich dann erstmal auf die Abfrage des Kollegen konzentrieren und schauen ob ich da was optimieren kann.
em-pie
em-pie 13.01.2017 um 09:14:45 Uhr
Goto Top
Moin,

NAchdem die Hardware sehr latent aussieht, würde ich dir auch empfehlen, mal die Abfrage deines Kollegen zu analysieren und dann mal zu schauen, in wie weit die Tabellen / Indizes/ ABfragen performanter gestaltet werden können.

Vllt. helfen dir noch diese Links:
https://www.mssqltips.com/sqlservertip/1708/index-fragmentation-report-i ...
https://msdn.microsoft.com/de-de/library/ms189858.aspx
SeaStorm
SeaStorm 13.01.2017 um 15:06:33 Uhr
Goto Top
Am direktesten wird es wohl gehen, wenn man die abfrage selbst mal analysiert.
Dazu einfach im SSMS eine Neue Abfrage machen, die Query des Kollegen da reinkopieren und dann unter dem Menü "Abfrage" die Option "Tatsächlichen Ausführungsplan einschliessen" und evtl auch "Clientstatistik einschliessen" auswählen.

Dann das Query abfeuern.

Unter dem Ausführungsplan kann man dann recht schön sehen was der SQL intern macht (welche Tabellen und Indexe aufgerufen werden, wann und wie er sortiert etc). Anhand der Kosten, die dort einsehbar sind, kann man gut abschätzen, was hier Leistung schluckt.

Eine korrekte Indexierung ist natürlich extrem wichtig.
Ansonsten sollten wir evtl. etwas genauer wissen, was diese Abfrage so macht. Es gibt uU verschiedene Möglichkeiten solche Dinge anders zu lösen, als durch gigantische und komplexe Abfragen.z.B Schemagebundene Views