Jump to content

MS SQL Server 2012 Datenbank Optimieren, aber wie Richtig?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

aktuell beschäftige ich mich damit eine SQL Datenbank zu Optimieren. Aktuell liegen außer des PK keine 

Indizes auf den Tabellen, ich gehen also davon aus das alleine das einrichten solcher schon einmal einen großen Mehrwert bringen wird ....

 

Die Frage an der stelle ist nun wie geht man am schlausten an die Sache herran ...

 

Hier vielleicht mal ein paar fakten zur Datenbank ...

 

- MS SQL Server 2012

- DB Größe ca. 3 GB 

- ca. 20 Tabellen mit bis zu 50k Zielen 

  die meisten werden sich aber im bereich von 5 - 10k Zeilen bewegen ...

- Wenig Binärdaten (Gibt nur eine 2 Tabellen die Bilder als Blob Feld enthalten .. 

 

Gibt es ne Möglichkeit grundsätzlich erst einmal herauszufinden welche Abfragen am häufigsten getätigt werden ? Ich hätte jetzt ein paar zusätzliche Zeilen Code ins Frone End gepackt der alle SQLs die über das Frontend kommen gespeichert hätte so könnte man sehen welche SQLs am häufigsten eingesetzt werden ... aber das geht doch bestimmt auch noch schlauer ...

 

ich bin für jeden Tipp dankbar ..

mir geht es hier auch nicht um eine Fertig Lösung, ich möchte einfach nur bereifen wie man es richtig macht ...

 

Danke im Vorraus

 

Husker

 

 

Link zu diesem Kommentar

Es gibt den SQL Profiler um den SQL Server zu analysieren.

Habt ihr aktuell Performance Probleme?

Was läuft denn dort für eine Applikation? Was sagt der Hersteller zur Optimierung?

 

Jupp den kenne ich ,,,,

Der Hersteller sagt nix dazu ... die Application ist eine Inhouse Entwicklung ...

die auf .NET basiert. Vorranging Rechungsmanagment und Stammdatenverwaltung ... (Diese Beschreibung wird dem Original natürlich nicht gerecht)

 

Performace Probleme in dem Sinne haben wir nicht ,,,,

noch ist die Geschwindigkeit akzeptabel aber halt nicht wirklich gut ...

 

Wir Refactorn jetzt aber 2 Große Module im Frontend, in diesem Zuge wollten wir die DB gleich mit

Optimieren ... wenn wir es eh alles gleich mal anfassen müssen ...

 

Den Profiler habe ich immer zur nur Live Ansicht benutzt, kann man sich dort auch irgendwelche Auswertungen ziehen welche SQLs besonders häufig eingesetzt werden ?

 

Danke schon mal für deine Antwort

Link zu diesem Kommentar

Hallo,

das alles ist schon klar ...

ich erwarte ja auch nicht das Ihr meine Datenbank Optimiert ....

 

Was ich wissen wollte wie man am Besten an diese Sache Herangehen kann ....

Aktuell lasse ich mal den Profiler Laufen und schneide alles mit ... das lasse ich in eine Tabelle schreiben ...

Das Läuft noch bis 22 Uhr heute Abend dann wollte ich die Statments mal Gruppieren um zu sehen welches die häufigsten abfragen sind ....

 

Dan wollte ich schauen wie lange diese Abfragen im einzelnen dauern und dann anfangen über Indizes  die Abfrage dauer zu reduzieren ..

Wie gesagt, es geht mir nicht um die Lösung sondern um die Herangehensweise :-)


oder z.b. wie man abfragen überhaupt erstmal findet die lange brauchen .....

Link zu diesem Kommentar

Die Herangehensweise ist im ersten Schritt, das der Entwickler der Applikation / DB diese Optimiert. Dieser weiß am besten was zu optimieren ist.

 

Falsch Optimieren kann die Performance auch verschlechtern. Zu viele Indizes machen z.B. Insert, Update und Delete Querys langsam.

 

Wie sieht das Sizing (v.a. Ram und Disk Konfiguration) des SQL Servers aus? Evtl. gibt es dort schon Probleme.

Es gibt auch andere Wege einen SQL Server zu optimieren. Logs, Daten und TempDB auf eigenen Spindeln ablegen, Volumens nicht mit Default Block Größen formatieren, diverse SQL Server Einstellungen,...

Link zu diesem Kommentar

Die Herangehensweise ist im ersten Schritt, das der Entwickler der Applikation / DB diese Optimiert. Dieser weiß am besten was zu optimieren ist.

 

Falsch Optimieren kann die Performance auch verschlechtern. Zu viele Indizes machen z.B. Insert, Update und Delete Querys langsam.

 

Wie sieht das Sizing (v.a. Ram und Disk Konfiguration) des SQL Servers aus? Evtl. gibt es dort schon Probleme.

Es gibt auch andere Wege einen SQL Server zu optimieren. Logs, Daten und TempDB auf eigenen Spindeln ablegen, Volumens nicht mit Default Block Größen formatieren, diverse SQL Server Einstellungen,...

 

Jetzt kommen wir der Sache schon näher ... :-)

also der SQL Server läuft aktuell auf einer HyperV Maschien unter Windows Server 2012 R2

Ram hat er 20 GB wovon aktuell nur 8 Benutzt werden ...

4 Cores Intel I28 irgendwas ....

 

Die Virtuelle HDD hat 250 GB wobei aktuell 135 Belegt sind, das meiste aber durch DB Backups die nachts verschoben werden ...

Die Originalplatten also die Tatsächlichen laufen in einem RAID 5 SYSTEM !

Die Formatierung, sowohl der Virtuellen als auch der Pysischen Platten ist Standart !!! (NTSF)

 

Der SQL Server legt stündlich ein Backup der DB an ...

Hilft das erstmal weiter ?

bearbeitet von Husker
Link zu diesem Kommentar

Jetzt kommen wir der Sache schon näher ... :-)

also der SQL Server läuft aktuell auf einer HyperV Maschien unter Windows Server 2012 R2

Ram hat er 20 GB wovon aktuell nur 8 Benutzt werden ...

4 Cores Intel I28 irgendwas ....

 

Hat die VM 4 Cores zugewiesen oder hat der Host 4 Cores? 20 GB Ram sind u.U. gar nicht nötig.

 

Die Virtuelle HDD hat 250 GB wobei aktuell 135 Belegt sind, das meiste aber durch DB Backups die nachts verschoben werden ...

Die Originalplatten also die Tatsächlichen laufen in einem RAID 5 SYSTEM !

Die Formatierung, sowohl der Virtuellen als auch der Pysischen Platten ist Standart !!! (NTSF)

 

Bei einem Raid Set geht das mit den Spindeln aufteilen Schlecht, aber ich würde die SQL Daten, Logs und TempDB nicht auf der OS Disk lassen sondern min. eine virtuelle Disk für die Logs und eine für die Daten erstellen und wenn du magst eine für TempDB (jenachdem wie sehr das genutzt wird, sonst Temp DB zu den User Datenbanken). Man kann die Volumens mit optimierten Block Größen formatieren, wird aber nicht so kritisch sein.

Evtl. ist auch ein eigenes Volume für die Backups sinnvoll oder gleich eine Sicherung auf ein anderes Medium.

 

Der SQL Server legt stündlich ein Backup der DB an ...

Hilft das erstmal weiter ?

 

Sind das Transaktionslog Sicherungen oder Datenbanksicherung?

Link zu diesem Kommentar

 

Jetzt kommen wir der Sache schon näher ... :-)

also der SQL Server läuft aktuell auf einer HyperV Maschien unter Windows Server 2012 R2

Ram hat er 20 GB wovon aktuell nur 8 Benutzt werden ...

4 Cores Intel I28 irgendwas ....

 

Die Virtuelle HDD hat 250 GB wobei aktuell 135 Belegt sind, das meiste aber durch DB Backups die nachts verschoben werden ...

Die Originalplatten also die Tatsächlichen laufen in einem RAID 5 SYSTEM !

Die Formatierung, sowohl der Virtuellen als auch der Pysischen Platten ist Standart !!! (NTSF)

 

Der SQL Server legt stündlich ein Backup der DB an ...

Hilft das erstmal weiter ?

Hilft nicht so richtig, weil Deine Aussagen leider (fast) nichts aussagen!

Wie viele Core's sind dem SQL-Server zugewiesen?

Um was für einen SQL Server handelt es sich (z.B. Express-Edition, Standard)?

Um was für ein Plattensystem handelt es sich auf dem Host (SAS-Platten, SATA-Platten, Wie viele Platten im RAID5, RAID-Controller mit Cache und BBU?)

 

Bei den bisher gemachten Aussagen gehe ich stark davon aus, dass das Problem mehr in der Hardware zu suchen ist als in der Konfiguration bzw. Optimierung des SQL-Servers!

 

Gruß

Dirk

bearbeitet von monstermania
Link zu diesem Kommentar

Also allgemein zu einem SQL-Server  (nicht nur von MS)

 

Wichtig ist:

 

- Reorg  der  Tabellen durchführen

- Reorg  der  Indizes (oder Neuaufbau) durchführen

- Datenbank-Statistiken über alle Tabellen inkl. der  Indizes aktuell halten (die werden  unbedingt zur Berechnung optimaler Zugriffpfade  benötigt).

 

Nun das leidige Thema "Indizes":

 

Ich erlebe es immer wieder, dass man Anwendungen entweder ganz ohne Indizes (außer  bei PK's), sinnfreien  Indizes  (hier gab es tatsächlich mal einen fall, im dem alle Spalten einer Tabelle im Index vertreten waren) oder veralteten Indizes bekommt.

Hier kann ein Admin nur die Tools vom SQL-Server verwenden um einen Workload  (der möglichst alle häufig auftretenden Abfragen umfasst) analysiert und  die resultierenden Indizes der Softwareentwicklung übergibt zu Validierung und Freigabe.

Indizes müssen zu den verwendeten Abfragen passen. Die kennt der Admin üblicherweise nicht. Des Weiteren sollten sog. Residual Predicates vermieden werden (kann auch nur  die Entwicklung).

 

PS: Die  VM sollte keine Snapshots  besitzen.

Link zu diesem Kommentar

Hallo

 

 

Hat die VM 4 Cores zugewiesen oder hat der Host 4 Cores? 20 GB Ram sind u.U. gar nicht nötig.

 

Ja die 4 Cores gehören der VM, der Host hat 32 Cores --> Habe mich da sogar vertan den die VM hat 6 Cores ....

 

 

 

Sind das Transaktionslog Sicherungen oder Datenbanksicherung?

 

Datenbanksicherungen !!!

 

Früher haben wir auch die Transaktionslogs gespeichert, das habe ich aber abgeschaltet weil wirt die nie brauchten !

 

 

Bei einem Raid Set geht das mit den Spindeln aufteilen Schlecht, aber ich würde die SQL Daten, Logs und TempDB nicht auf der OS Disk lassen sondern min. eine virtuelle Disk für die Logs und eine für die Daten erstellen und wenn du magst eine für TempDB (jenachdem wie sehr das genutzt wird, sonst Temp DB zu den User Datenbanken). Man kann die Volumens mit optimierten Block Größen formatieren, wird aber nicht so kritisch sein.

Evtl. ist auch ein eigenes Volume für die Backups sinnvoll oder gleich eine Sicherung auf ein anderes Medium.

 

Das werde ich mal versuchen

Welche Blockgrößen wären den für ein Datenbank System Optimal ?

 

 

 

Um was für einen SQL Server handelt es sich (z.B. Express-Edition, Standard)?

 

MS SQL Server 2012 Standard

 

 

 

Um was für ein Plattensystem handelt es sich auf dem Host (SAS-Platten, SATA-Platten, Wie viele Platten im RAID5, RAID-Controller mit Cache und BBU?)

 

Jetzt wird es schon schwieriger ...

der Server hat 4 x 3 TB Platten als RAID 5 Verbund, es handelt sich um SATA 3 Platten 

Soweit ich weis wird 1 der 4 Platten zum Spiegeln verwendet ! --> Hier hört es aber solangsam auf .... :-)

 

 

 

Bei den bisher gemachten Aussagen gehe ich stark davon aus, dass das Problem mehr in der Hardware zu suchen ist als in der Konfiguration bzw. Optimierung des SQL-Servers!

 

Ein Problem in dem Sinne gibt es ja noch nicht ...

Ja so langsam könnte man mal anfangen zu Optimieren, aber die Geschwindigkeit ist aktuell noch Akzeptabel ...

Will nur nicht warten bis es anders ist zumal die Optimierung ja nicht in 1 Stunde getan ist ...

 

 

 

- Reorg  der  Tabellen durchführen

 

Sehr guter Hinweis, das hatte ich beim Neuaufsetzen des SQL Server nämlich vergessen :-)

 

 

 

Ich erlebe es immer wieder, dass man Anwendungen entweder ganz ohne Indizes (außer  bei PK's), sinnfreien  Indizes  (hier gab es tatsächlich mal einen fall, im dem alle Spalten einer Tabelle im Index vertreten waren) oder veralteten Indizes bekommt.

 

Genau das ist ja bei uns Aktuell der Fall, als ich vor fast 8 Jahren mit der Entwicklung Anfing war ich noch grün hinter den Ohren und wusste es nicht besser, und bisher lief alles eigentlich gut, wie gesagt, so langsam fängt man aber an die wachsende Datenbank zu merken, und ich wollte das jetzt schon mal beginnen bevor das Kind in den Brunnen gefallen ist :-)

 

So ich hoffe ich konnte alle eure Fragen zur zufriedenheit beantworten :-)

 

Danke schon einmal für euer bemühen mir zu helfen !

Link zu diesem Kommentar

Moin,

 

schau dire mal den Datenbankoptimierungsratgeber im SQL Server Management Studio an.

 

Dass der Entwickler einer Datenbank gute Hinweise zur Optimierung geben kann, ist zwar richtig. Das Anlegen und Warten von Indizes gehört aber zu den Kernaufgaben eines Datenbankadministrators (DBA), weil diese Rolle mit der tatsächlichen Infrastruktur mehr zu tun hat.

 

Gruß, Nils

Link zu diesem Kommentar
Datenbanksicherungen !!!

 

Früher haben wir auch die Transaktionslogs gespeichert, das habe ich aber abgeschaltet weil wirt die nie brauchten !

 

Informiere dich über Backup / Recovery von SQL Servern. Du willst nicht jede Stunde ein DB Backup erstellen sondern nur Transaktionslogsicherungen.

 

Jetzt wird es schon schwieriger ...

der Server hat 4 x 3 TB Platten als RAID 5 Verbund, es handelt sich um SATA 3 Platten 

Soweit ich weis wird 1 der 4 Platten zum Spiegeln verwendet ! --> Hier hört es aber solangsam auf .... :-)

 

Und auf dem Server läuft noch weiterer Workload? Andere VM's? Sind die Platten für OS und VM's oder gibt es für den Hypervisor eigene Disks?

Es ist bei solch einer Konfiguration kein Wunder, dass die Datenbank langsam ist.

 

Wird bei euch keine Verfügbarkeit gefordert?

bearbeitet von Dukel
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...