Diskeeper steigert die Performance von SQL-Servern Software-Spotlight von Brad M. McGehee Einer der hinderlichsten Leistungsengpässe auf SQL-Servern kommt durch die E/A-Abfragen auf den Festplatten zustande. Alles, was Datenbankadministratoren zur Reduzierung der Belastung von SQL-Servern durch E/A-Abfragen tun können, trägt dementsprechend zu einer Steigerung der Systemleistung bei. Datenbankadministratoren ergreifen folgende Maßnahmen, um die durch E/A-Abfragen entstehenden Leistungsengpässe zu reduzieren: • • • • Feineinstellen von Abfragen, um die Menge der zurückgegebenen Daten zu reduzieren. Verwenden schneller Festplatten und Arrays. Einsetzen umfangreicher RAM-Speicher, um mehr Daten zwischenspeichern zu können. Häufiges Ausführen eines DBCC REINDEX-Prozesses, um die Fragmentierung der logischen Datenbank zu beseitigen. Eine weitere, weniger häufig verwendete, aber deshalb nicht weniger wichtige Methode zum Reduzieren der E/A-Abfragen auf der Festplatte ist das Durchführen einer physikalischen Defragmentierung der SQL Server-Programmdateien, Datenbankdateien, Transaktionsprotokolle und Backupdateien. Die physikalische Fragmentierung von Dateien hat zweierlei Ursachen. Zum einen werden die einzelnen Dateien in mehrere Abschnitte aufgeteilt und über eine Festplatte oder einen Array verteilt abgelegt. Sie sind auf der Festplatte also nicht mehr nebeneinander gespeichert. Zum anderen wird der freie Festplattenspeicher auf der Festplatte oder dem Array in kleine, über die Festplatte verstreute Bereiche aufgeteilt, bis immer weniger große, zusammenhängende Speicherbereiche verfügbar sind. Infolge der Dateifragmentierung muss der Festplattenkopf zum Abrufen der einzelnen Dateiabschnitte mehr Bewegungen ausführen, als das bei einer zusammenhängenden Speicherung der Fall ist. Je höher die physikalische Fragmentierung einer Datei, desto höher auch die Belastung des Festplattenlaufwerks, was schließlich zu einem Absinken der E/A-Abfrageleistung führt. Durch die Fragmentierung des Speicherplatzes verursacht auch das Schreiben von Daten auf die Festplatte schließlich Probleme. Daten lassen sich schneller in nebeneinander liegenden als in über die Festplatte oder einen Array verstreuten Speicherbereichen ablegen. Außerdem begünstigen viele leere Speicherbereiche die Fragmentierung der physikalischen Datei. Wenn Sie einen transaktionsintensiven SQL Server verwenden, der hauptsächlich INSERTS, UPDATES und DELETES durchführt, hat die Fragmentierung der physikalischen Festplatte nur geringe Auswirkungen, da nur wenige Datenseiten gelesen und wenige Daten geschrieben werden. Wenn Sie jedoch zahlreiche SELECTS durchführen, wie das in der Regel beim Scannen von Daten der Fall ist, dann beginnt sich die Fragmentierung der physikalischen Dateien auf die Performance auszuwirken, da bei diesem Vorgang viele Daten gelesen werden und der Festplattenkopf somit einer hohen Belastung ausgesetzt ist. Sowohl Windows 2000 als auch Windows 2003 ist mit einem integrierten Defragmentierprogramm ausgestattet. Dieses Programm ist allerdings langsam, defragmentiert nicht immer besonders gründlich und enthält keine gute Planungsfunktion. Aus diesem Grund habe ich mich entschlossen, es einmal mit Diskeeper 8.0 der Diskeeper Corporation zu versuchen. Dieses Defragmentierprogramm steht in fünf verschiedenen Versionen zur Verfügung: • • • • • Home Professional Administrator Standard Server Server Enterprise Für diesen Artikel habe ich sowohl die Professional- als auch die Standard Server-Edition getestet. Beide Editions sind sich einander ähnlich, unterscheiden sich jedoch, wie zu erwarten, auf der Ebene der Funktionen. Die Professional Edition wurde für DesktopComputer und die Standard Server-Edition für Server entwickelt. In diesem Artikel möchte ich die lediglich Funktionsweise von Diskeeper erklären. Es geht also nicht um das Gegenüberstellen von Vor- und Nachteilen der Software. Diskeeper in Aktion Wer sehen möchte, was Diskeeper kann, der probiert das Tool am besten einfach aus. Und genau das werde ich jetzt tun. Um die Funktionsweise von Diskeeper auf einem SQL-Server zu testen, habe ich das Tool auf einem SQL-Server installiert, der seit ungefähr fünf Monaten in Betrieb und noch nie zuvor defragmentiert worden war. Diskeeper enthält ein Tool zum Analysieren des Fragmentierungsgrads vor und nach der Defragmentierung. Das Ergebnis kann sehr aufschlussreich sein. Ich habe Diskeeper also installiert und gestartet. Daraufhin erschien folgendes Fenster (geändert, um auf die Webseite zu passen). Als erstes wollte ich den Fragmentierungsgrad der Dateien auf dem Server ermitteln, vor allem auf dem Laufwerk F, auf dem die MDFs, LDFs und Backup-Dateien der Datenbank gespeichert waren. Darüber hinaus befanden sich auch die ausführbaren Dateien von SQL Server auf dem Laufwerk F. Auf dem Laufwerk C war lediglich das Betriebssystem gespeichert. Ich habe zunächst einmal das Laufwerk F analysiert. Im Anschluss an diese Analyse generiert Diskeeper mehrere Berichte, die im Folgenden abgebildet sind. Wie Sie sehen, wurden bei der Analyse 244 fragmentierte Dateien und 1831 Fragmente gefunden. Mit diesem Ergebnis gilt die Festplatte als besonders schwer fragmentiert und Diskeeper empfiehlt das Durchführen einer Defragmentierung. Zusätzlich zu dieser Zusammenfassung wird ein weiterer Bericht mit aufgeschlüsselten Zahlen generiert, der nachstehend abgebildet ist. Der Performance-Bericht ist nicht ganz so eindeutig wie der erste Bericht. Der Graph zeigt, dass die E/A-Performance mit einer Defragmentierung nur um 1% verbessert werden kann. Es wird eine sofortige Defragmentierung empfohlen, doch unter der Überschrift „Was bedeuten die Zahlen?” steht, dass der aktuelle Fragmentierungsgrad die Gesamtleistung noch nicht beeinträchtigt. Der Zuverlässigkeitsbericht ist da eindeutiger. Die Zahlen zeigen, dass die Zuverlässigkeit des Computers durch den aktuellen Fragmentierungsgrad stark beeinträchtigt ist und die Festplatten defragmentiert werden müssen. Der hohe Fragmentierungsgrad kann die einwandfreie Funktionsweise des Betriebssystems beeinträchtigt, so dass Fehler u. U. das Aufhängen von Programmen und das Abstürzen des Systems zur Folge haben, wenn sie nicht behoben werden. Der Fragmentierungsbericht enthält eine Menge interessanter Daten, mit denen die Empfehlung zugunsten einer Defragmentierung weiter untermauert wird. Visuell besonders interessant ist der Bericht über die Laufwerksfragmentierung, da er die Verteilung der Dateifragmente über die Festplatte aufzeigt. Blau kennzeichnet nicht fragmentierte Dateien und Rot die fragmentierten Dateien. Grün sind die Dateien, die nicht verschoben werden können, wie einige Systemdateien. Der Empfehlung von Diskeeper folgend habe ich diese Option manuell ausgewählt und auf den Abschluss der Defragmentierung gewartet. Anschließend sahen meine Laufwerke so aus. Wie Sie sehen, hat Diskeeper die Fragmentierung dieser Festplatte nahezu beseitigt. Ich möchte nicht auf alle Berichte einzeln eingehen, kann Ihnen aber versichern, dass sie alle eine 100 %-ige Defragmentierung der Festplatte aufzeigen. Damit war die Dateifragmentierung beseitigt und konnte die Leistung des SQL-Servers nicht mehr beeinträchtigen. Was jetzt? Hatten wir die Lage mit der Defragmentierung der Festplatte wieder fest im Griff? Nein. Die Fragmentierung baut sich immer wieder auf. Obwohl das NTFS-Dateisystem versucht, den Fragmentierungsgrad so niedrig wie möglich zu hatten, ist das Ergebnis nicht unbedingt zufriedenstellend. Wenn die optimale E/A-Leistung aufrechterhalten werden soll, muss die Defragmentierung also kontinuierlich durchgeführt werden. Dazu stellt Ihnen Diskeeper eine bedarfsorientierte Planung zur Verfügung. Von den verschiedenen Optionen, die zur Wahl stehen, zeichnet sich die Option „Set it and Forget It” durch ihre hohe Benutzerfreundlichkeit aus. Wenn Sie diese Option aktivieren, führt Diskeeper bei einer geringstmöglichen Belastung der Systemressourcen automatisch eine kontinuierliche Defragmentierung Ihres Systems durch. Diese Einstellung sollte bei den meisten SQL Servern gut funktionieren, sofern sie nicht schon überlastet sind. Wenn der SQL-Server einer besonders hohen Belastung ausgesetzt ist, sollten Sie die Defragmentierung manuell für Zeiträume planen, in denen die Ressourcen weniger beansprucht werden. Kann Diskeeper Open SQL Server MDF- und LDF-Dateien defragmentieren? Bei der Festplattendefragmentierung gilt die Defragmentierung von genutzten Dateien als besonders bedenklich. Mit anderen Worten stellt sich die Frage, ob Diskeeper oder ein anderes Defragmentierprogramm auch die Dateien defragmentieren kann, auf die gerade zugegriffen wird? Die Diskeeper Corporation hat auf diese Frage Folgendes geantwortet: „Diskeeper defragmentiert die Festplatte auf der Ebene des Betriebssystems und verwendet dazu die Windows MoveFile-APIs.” Das bedeutet, das Diskeeper eine Festplatte auf der Ebene des Betriebssystems defragmentieren kann, ohne dass es dabei eine Rolle spielt, ob ein SQLoder Exchange-Server ausgeführt wird. Da meinen Tests noch der endgültige Beweis fehlte, habe ich obiges Experiment durchgeführt. Die SQL Server MDF- und LDF-Dateien waren in der Tat defragmentiert worden, obwohl sie zum Zeitpunkt des Vorgangs geöffnet waren. Stellen Sie Diskeeper auf die Probe Glücklicherweise können Sie jede beliebige Diskeeper-Edition kostenlos testen. Das ist der beste Weg, um herauszufinden, ob das Tool Ihren Anforderungen entspricht. Über den Verfasser: Brad M. McGehee ist ein vollzeitbeschäftigter Datenbankadministrator in einer großen Produktionsgesellschaft und Herausgeber von www.SQL-Server-Performance.Com, einer auf das Tuning und Clustering der SQL-Server-Performance spezialisierten Website. Er ist ein MVP, MCSE+I, MCSD und ehemaliger MCT. Neudruck mit der Genehmigung von SQL-Server-Performance.Com © 2000 - 2005 SQL-Server-Performance.Com Alle Rechte vorbehalten. Diskeeper Corporation und Diskeeper sind eingetragene Warenzeichen oder Warenzeichen Diskeeper Corporation, Inc. Alle anderen Warenzeichen sind Eigentum ihrer jeweiligen Inhaber.