SQL Server 2008: Datenbanken Performance-Optimierung Überblick

03 Juli 2013
Jelena Barth

DB Performance-Optimierung ist ein Zusammenspiel zwischen der verfügbaren Hardwarearchitektur und den auf die Datenbank angewandten Optimierungstechniken.

Hardware
Als erstes sollte man feststellen, dass die verfügbare Hardwarearchitektur optimal genutzt wird. Allerdings können Optimierungstechniken sowie Auslagerung der großen Tabellen oder nicht-gruppierten Indizes in eigene Filegroups, Partitionierung der Tabellen/Indizes Ihre Abfragen eher verlangsamen, falls Sie keine Möglichkeit haben die erstellten Filegroups auf separate physische Disks zu legen.

Ein Idealfall für die Hardwarearchitektur wäre ein physikalischer Server für SQL Server mit 3 Raid-Systemen (Bsp. das erste Raid 1 für das Betriebssystem, Raid 10 für die Datenbank und das zweite Raid 1 für das Transaktionsprotokoll), einer Instanz, getrennt von der Anwendung.

Database Tuning Advisor
Wenn keine Möglichkeit besteht, an der Hardware etwas zu verändern, dann sollte man mit dem Datenbankoptimierungsratgeber (engl. Database Tuning Advisor, DTA) arbeiten. Der einfachste und zeitsparende Weg ist es, eine für Tuning optimierte Ablaufverfolgung im SQL Server 2008 Profiler erstellen zu lassen, in dem man die entsprechenden Filter setzt, und diese dann vom DTA analysieren zu lassen.

Der DTA schlägt dann die Skripte fürs Erstellen der fehlenden Indizes, Löschen der überflüssigen Indizes, Aktualisieren der Statistiken etc. - alles was notwendig ist um optimale Ausführungspläne für die Abfragen zu erstellen – vor.

Natürlich können Sie alle diese Optimierungsschritte auch manuell durchführen und jeden einzelnen Index und seine Auswirkung auf die Geschwindigkeit der Abfrage analysieren. Das wird nicht so einfach sein, falls Sie kein Datenbanken- Experte wie Holger Schmeling sind. Seine Bücher können Ihnen dabei helfen.

Indizes
Die Beschleunigung der Abfragen durch das manuelle Setzen der richtigen Indizes ist eine Wissenschaft für sich. Eine Datenbank sollte so viele Indizes wie notwendig, und so wenig wie möglich enthalten. Überflüssige Indizes verbrauchen Ressourcen bei Update-Operationen und stellen den Abfrage-Optimierer vor die Wahl, was wiederum Zeit kostet.

Fragmentierung
Einer der Faktoren, der die Geschwindigkeit der Abfrage negativ beeinflusst, ist der Grad in dem die Indizes fragmentiert sind. Es ist empfehlenswert ab 10% der Fragmentierung die Indizes zu reorganisieren und ab 40% sie neu zu erzeugen. Diese Vorgehensweise kann aber an der Hardware scheitern, da falls der freie Platzt fragmentiert ist, die neu hinzugefügten Indizes auch schon fragmentiert sein werden und Ihre Defragmentierungsaktion damit erfolglos bleibt.

Statistiken
Die Rolle der Statistiken bei der Datenbank-Performance wird oft unterschätzt. Dabei sind die aktuellsten Statistiken für das Erstellen der optimalen Ausführungspläne notwendig und sollten vor allem bei den Tabellen mit vielen E/A-Operationen regelmäßig aktualisiert werden. Mehr zu den Statistiken finden Sie in dem Blog-Eintrag Statistiken kurzgefasst.

Nach der Optimierung
Einmal optimiert heißt nicht, dass danach nichts mehr gemacht werden muss.
Es ist ratsam Ihre Anwendungsdatenbank für eine Weile zu beobachten, d.h. Daten bezüglich der Verwendung der Indizes mithilfe der Aufstellung des Auflistsatzes zu sammeln (Buch: SQL Server 2008, Performance-Optimierung von Holger-Schmeling, S. 290) und anhand dieser Daten die überflüssigen und fehlenden kostspieligen Indizes zu identifizieren und die entsprechenden Aktionen durchzuführen.

SQL Server 2012
Eine Überlegung wäre es auf den SQL Server 2012 umzusteigen. Eine der neuen Features ist der speicheroptimierte xVelocity-columnstore-Index. Für eine Datenbank, in der viel gelesen wird kann das Einsetzen von columnstore-Indizes zur bemerkenswerten Leistungssteigerung führen. Ein Nachteil ist, dass dieser Index die Insert-Operationen verhindert. Eine Lösung ist den Index zu löschen, INSERT-Anweisungen auszuführen, den Index neu zu erstellen.

Weitere Quellen
Zum Thema Partitionierung und Indizes gibt es ein Whitepaper von Microsoft.

Datenbanken Performance-Optimierung ist ein sehr umfangreiches Thema. Die Sammlung der Einträge „Performance Tuning Tips” ist sehr zu empfehlen. Unterschiedliche Optimierungstechniken werden hier in Kategorien unterteilt und detailliert beschrieben.