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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326210
Url: https://administrator.de/contentid/326210
Ausgedruckt am: 24.11.2024 um 12:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
die Gründe können vielseitig sein..
Aber fangen wir mal an eine Ist-Aufnahme durchzuführen, in dem du folgende Fragen beantwortest:
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
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
Hallo,
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
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
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.
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.
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
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
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
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