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-Key: 326210

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

Printed on: April 19, 2024 at 19:04 o'clock

Member: em-pie
Solution em-pie Jan 12, 2017 updated at 21:47:51 (UTC)
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
Member: lazkopat85
lazkopat85 Jan 12, 2017 at 22:13:55 (UTC)
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
Member: Pjordorf
Pjordorf Jan 12, 2017 at 23:07:29 (UTC)
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
Member: ukulele-7
ukulele-7 Jan 13, 2017 at 07:28:10 (UTC)
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.
Member: lazkopat85
lazkopat85 Jan 13, 2017 at 08:00:07 (UTC)
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.
Member: em-pie
em-pie Jan 13, 2017 at 08:14:45 (UTC)
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
Member: SeaStorm
SeaStorm Jan 13, 2017 at 14:06:33 (UTC)
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