Zum Inhalt wechseln


Foto

MS SQL Server 2012 Datenbank Optimieren, aber wie Richtig?

MS SQL

  • Bitte melde dich an um zu Antworten
46 Antworten in diesem Thema

#1 Husker

Husker

    Newbie

  • 14 Beiträge

 

Geschrieben 18. November 2014 - 10:29

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

 

 



#2 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 18. November 2014 - 12:08

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?


Stop making stupid people famous.


#3 Husker

Husker

    Newbie

  • 14 Beiträge

 

Geschrieben 18. November 2014 - 12:14

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



#4 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 18. November 2014 - 12:20

Wenn ihr die Anwendung inhouse entwickelt solltet ihr selbst wissen welche Statements abgeschickt werden und wie ihr die DB optimiert.


Stop making stupid people famous.


#5 Sunny61

Sunny61

    Expert Member

  • 22.243 Beiträge

 

Geschrieben 18. November 2014 - 12:28

Pauschal irgendwelche Tipps zu geben ist nicht gut und hilft euch sicherlich nicht. Wenn es bestimmte Statements gibt, die lange brauchen, kann man sich auf die einzeln stürzen und analysieren.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#6 Husker

Husker

    Newbie

  • 14 Beiträge

 

Geschrieben 18. November 2014 - 14:12

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 .....



#7 Sunny61

Sunny61

    Expert Member

  • 22.243 Beiträge

 

Geschrieben 18. November 2014 - 14:15

OK, Uwe Ricken hat dazu das ein oder andere veröffentlicht: http://db-berater.blogspot.de/
Evtl. hilft dir ja sein Blog.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#8 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 18. November 2014 - 14:16

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,...


Stop making stupid people famous.


#9 Husker

Husker

    Newbie

  • 14 Beiträge

 

Geschrieben 18. November 2014 - 15:04

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, 18. November 2014 - 15:05.


#10 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 18. November 2014 - 15:22

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?


Stop making stupid people famous.


#11 monstermania

monstermania

    Board Veteran

  • 1.201 Beiträge

 

Geschrieben 18. November 2014 - 15:38

 

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, 18. November 2014 - 15:39.


#12 zahni

zahni

    Expert Member

  • 16.513 Beiträge

 

Geschrieben 18. November 2014 - 15:40

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.


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#13 Husker

Husker

    Newbie

  • 14 Beiträge

 

Geschrieben 18. November 2014 - 16:02

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 !



#14 NilsK

NilsK

    Expert Member

  • 12.471 Beiträge

 

Geschrieben 18. November 2014 - 16:08

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#15 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 18. November 2014 - 16:09

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, 18. November 2014 - 16:11.

Stop making stupid people famous.




Auch mit einem oder mehreren der folgenden Tags versehen: MS SQL