Husker 0 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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? Zitieren Link zu diesem Kommentar
Husker 0 Geschrieben 18. November 2014 Autor Melden Teilen Geschrieben 18. November 2014 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 Wenn ihr die Anwendung inhouse entwickelt solltet ihr selbst wissen welche Statements abgeschickt werden und wie ihr die DB optimiert. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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. Zitieren Link zu diesem Kommentar
Husker 0 Geschrieben 18. November 2014 Autor Melden Teilen Geschrieben 18. November 2014 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 ..... Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 OK, Uwe Ricken hat dazu das ein oder andere veröffentlicht: http://db-berater.blogspot.de/ Evtl. hilft dir ja sein Blog. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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,... Zitieren Link zu diesem Kommentar
Husker 0 Geschrieben 18. November 2014 Autor Melden Teilen Geschrieben 18. November 2014 (bearbeitet) 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 18. November 2014 von Husker Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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? Zitieren Link zu diesem Kommentar
monstermania 53 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 (bearbeitet) 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 18. November 2014 von monstermania Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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. Zitieren Link zu diesem Kommentar
Husker 0 Geschrieben 18. November 2014 Autor Melden Teilen Geschrieben 18. November 2014 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 ! Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 18. November 2014 Melden Teilen Geschrieben 18. November 2014 (bearbeitet) 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 18. November 2014 von Dukel Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.