Anleitung zur Optimierung von MO-Datenbanken Dok.-Nr: SQL-Opti-MO Version: 1.4 Datum: 13.01.2005 Status: freigegeben Klassifizierung: keine Autor: R. Peter / IC / publisuisse SA Verteiler: Web
Seite 2 / 34 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung...3 1.1 Zweck des Dokumentes...3 1.2 Allgemeines...3 1.3 Geltungsbereich...3 1.4 Konfiguration und Wirkung...3 2 Die Hardware...4 2.1 Arbeitsspeicher...4 2.2 Disk Layout...5 2.3 Kontroller...5 3 Windows-Einstellung...6 3.1 Prozessor-Zeitplanung...6 3.2 Prozessornutzung...7 3.3 Speichernutzung...8 4 MSSQL-Server-Einstellungen...9 4.1 Speichereinstellung...9 5 Datenbank-Einstellungen...10 5.1 Allgemeines in Kürze...10 5.2 Aufteilen der DB-Daten- und Transaction-Log...10 5.2.1 Datenbank-Wachstum (Filegrowth)...15 5.2.2 Statistiken...16 5.2.3 Recovery Mode & Torn page...17 6 Wartungsplan...18 6.1 Neuer Wartungsplan anlegen...18 6.2 Wartungsplan für System-Datenbanken...19 6.2.1 Reindexierung...20 6.2.2 Integrität...20 6.2.3 Backup...21 6.2.4 Transaction-Log Backup...23 6.2.5 Reporting...24 6.3 Wartungsplan für User-Datenbanken...26 6.3.1 Reindexierung...27 6.3.1.1 Indexierungsgrad...27 6.3.2 Integrität...28 6.3.3 Backup...29 6.3.4 Trans-Log Backup...31 6.3.5 Reporting...33
Einleitung Seite 3 / 34 1 Einleitung 1.1 Zweck des Dokumentes Alle Informationen die in diesem Dokument enthalten sind, sollen eine Performance- Verbesserung erbringen. Dabei werden folgende Punkte genauer beschrieben: Was Die Hardware Windows-Einstellungen MS SQL Server-Einstellungen Datenbank-Einstellungen Gewichtung Unter Gewichtung ist zu verstehen, dass eine Änderung der Datenbank-Einstellungen viel mehr Performance-Auswirkung hat, als andere Optimierungen. So ist also der Aufwand für Datenbank-Einstellungen klein, bringt aber viel Performance-Gewinn. 1.2 Allgemeines Wir haben uns bemüht, technische Ausdrücke so weit wie möglich zu vermeiden. Leider sind einige englische Ausdrücke in unserem Sprachgebrauch allgegenwärtig und eine Übersetzung wäre in einigen Fällen nur verwirrend. Wir bitten daher für die nicht übersetzten Ausdrücke um Verständnis. Die Ausdrücke Benutzer und User stehen sowohl für die weiblichen als auch für die männlichen Benutzer. Durch die einheitliche Verwendung ist das Lesen einfacher. Es wird keine Wertung impliziert. 1.3 Geltungsbereich Der gesamte Inhalt dieses Dokumentes bezieht sich auf MS SQL Server 2000. Diese können im grossen und ganzen auch auf MS SQL Server 7 angewandt werden. Die lizenzierte Version von MS SQL Server ist Voraussetzung. Die Informationen in diesem Dokument können nicht für die Gratisversion von Microsoft, MSDE, angewandt werden. Ein Teil des Inhaltes in diesem Dokument bezieht sich auf die Betriebssysteme Windows 2000 Server und MS Server 2003. 1.4 Konfiguration und Wirkung Alle Informationen in diesem Dokument, sind für den erfahrenen Datenbank- Administrator und teilweise auch für den erfahrenen System-Administrator bestimmt. Wer das benötigte Wissen nicht hat, sollte die Umsetzung der Tipps dem betreffenden Administrator überlassen.
Seite 4 / 34 Die Hardware 2 Die Hardware Datenbanken brauchen fast immer sehr grosse Ressourcen wie zum Beispiel Arbeitsspeicher oder Festplatten-Kapazität. Daher sollte die Hardware dementsprechend modern sein. Um eine gute Performance zu erhalten, müssen nebst der Hardware noch andere Dinge berücksichtigt werden. Es muss auf die Einstellungen des Betriebssystems und des MS SQL Servers geachtet werden, so wohl die Datenbank-Pflege als auch eine intelligente Programmierung spielen eine grosse Rolle. Wenn eine dieser Komponenten ausser Acht gelassen wird, so hat dies immer Performance-Einbussen zur Folge. Daher sind für einen Datenbank-Server folgende Punkte wichtig: viel Arbeitspeicher (RAM) moderner Prozessor ausreichend Platz auf mehreren Festplatten Aufteilung der Daten und Logs auf mehrere Festplatten Reindexierung der Datenbank mittels Wartungsplan 2.1 Arbeitsspeicher Je nach Anzahl der Benutzer, die mit mediaoptimizer arbeiten und Grösse der Datenbank, schwanken die Anforderungen an die Hardware enorm. Im Prinzip sollte ein Datenbank- Server so viel Speicher wie möglich haben.
Die Hardware Seite 5 / 34 2.2 Disk Layout Das Ziel des Einsatzes mehrerer Platten ist, dass die Datenbanken auf mehrere Platten aufgeteilt werden können. Die Aufteilung der Datenbank in Datenbank-Daten und Transaktions-Daten bringt viel Performance-Gewinn. Zwei Beispiele: V1 RAID1 RAID1 RAID5 Part. C System MSSQL (bin) SQL Log Disk D: SQL Data Disk D: SQL Data Optional bei 5 Disk System V2 RAID1 RAID1 RAID1 RAID5 Part. C System MSSQL (bin) Disk E: SQL Log Disk D: SQL Data 64kb format (default 4kb) Disk D: SQL Data Optional bei 7 Disk System Anmerkung: Beachten Sie bitte, dass die beiden Partitionen C und D nicht auf derselben physikalischen Festplatte sein sollten, da ein Schreib-/Lesezugriff über denselben Kontroller und Kanal verarbeitet werden muss. Bezüglich Performance wird es sonst nicht viel bringen. Empfehlenswert ist die zweite Variante, da das Betriebssystem von den Datenbaken entkoppelt ist. Bei der ersten Variante sind das Pagefile und die Datenbank-Log Dateien auf derselben Disk. 2.3 Kontroller Am RAID-Kontroller werden beide Kanäle eingesetzt. Eine schnellere Variante wäre, zwei getrennte Kontroller einzusetzen.
Seite 6 / 34 Windows-Einstellung 3 Windows-Einstellung 3.1 Prozessor-Zeitplanung Um die Leistung des Windows bezüglich MSSQL-Server zu optimieren, muss die Prozessorzeitplanung auf Hintergrunddienste geändert werden. Dazu klicken Sie mit der rechten Maustaste auf das Icon Arbeitsplatz und wählen Eigenschaften aus. Danach wählen Sie die Rubrik Erweitert und im Feld Systemleistung auf Einstellung aus. Im neuen Fenster wählen Sie Erweitert aus und anschliessend ändern Sie die Einstellung auf Hintergrunddienste.
Windows-Einstellung Seite 7 / 34 3.2 Prozessornutzung Wenn dem MS SQL-Server mehrere Prozessoren zur Verfügung stehen, sollten immer alle Prozessoren eingeschaltet werden. Sollten nicht alle Prozessoren aktiviert sein, so aktivieren Sie diese.
Seite 8 / 34 Windows-Einstellung 3.3 Speichernutzung Bezüglich Speichernutzung sollte diese für Programme und nicht für den System-Cache eingestellt werden. So erhalten aktive Dienste und Programme mehr Speicher zur Verfügung gestellt. Ansonsten wird dieser für das Caching verwendet. Dabei wächst das Pagefile um einiges an. Der virtuelle Arbeitsspeicher, Swap- oder auch Pagefile genannt, sollte nach Möglichkeit nicht auf ein MS SQL-Server-Daten oder Log-Laufwerk konfiguriert werden. Das Betriebssystem braucht den virtuellen Speicher immer; auch dann, wenn genügend Arbeitsspeicher vorhanden wäre. Begrenzen Sie dessen Grösse und wählen Sie nach Möglichkeit kein MS SQL-Server- Daten- oder Log-Laufwerk aus. Im Normalfall wird das Pagefile im Laufwerk C:\ angelegt.
MSSQL-Server-Einstellungen Seite 9 / 34 4 MSSQL-Server-Einstellungen 4.1 Speichereinstellung Der gesamte Speicher sollte nur auf reinen SQL-Servern zur Verfügung gestellt werden. Belassen Sie also die Einstellung auf Dynamically configure SQLServer Memory.
Seite 10 / 34 Datenbank-Einstellungen 5 Datenbank-Einstellungen 5.1 Allgemeines in Kürze Eine Datenbank besteht aus einem Datenbank-Management-System und deren abgelegte Datenbank-Daten. Datenbank-Daten bestehen aus Tabellen und Relationen und deren Transaktions- Log-Daten. Das Transaktion-Log ist der Zwischenspeicher einer Datenbank. Dort drin stehen Transaktionen die noch nicht in die Datenbank geschrieben wurden. 5.2 Aufteilen der DB-Daten- und Transaction-Log Für die Performance ist es von Bedeutung, dass die Datenbank-Daten- und das Transaction-Log auf zwei verschiedenen Laufwerken gespeichert werden. Normalerweise konfiguriert man dies bei der Erstellung der entsprechenden Datenbank. Eine nachträgliche Bearbeitung braucht einiges mehr an Zeit. 1. Zuerst sichern Sie Ihre betreffende Datenbank, bevor Sie mit der Manipulation beginnen. Anschliessend informieren Sie die MO-Benutzer, dass sie während der Konfiguration, mediaoptimizer nicht benützen dürfen.
Datenbank-Einstellungen Seite 11 / 34 2. Nach einer erfolgreichen Sicherung löschen Sie die entsprechende Datenbank. Anmerkung: Wir sprechen hier von Benutzer-Datenbanken und nicht von System-Datenbanken! Die System-Datenbanken wie zum Beispiel: Master, Model, Msdb und tempdb können nicht auf diese Weise verändert werden und sollte nicht angefasst werden!
Seite 12 / 34 Datenbank-Einstellungen 3. Nun erstellen Sie eine Datenbank mit dem gleichen Namen, wie die vorgängig gelöschte. In unserem Fall ist es die Datenbank mit dem Namen Northwind. Bei Ihnen wird es mouser oder momaster sein.
Datenbank-Einstellungen Seite 13 / 34 4. In der Spalte Location der Lasche "Data Files" geben Sie den Pfad an, wo die Datenbank gespeichert ist. Beachten Sie bitte, dass dies in unserem Fall im Laufwerk D ist.
Seite 14 / 34 Datenbank-Einstellungen 5. In der Spalte Location der Lasche "Transaction Log" geben Sie jetzt den Pfad an, wo sich das Transaction-Log befindet. Beachten Sie bitte, dass dies in unserem Fall im Laufwerk E ist. So wird auf eine sehr einfache Art und Weise die Datenbank-Daten-Datei und die Datenbank-Transaction-Log-Datei von einander auf zwei verschiedene Laufwerke getrennt.
Datenbank-Einstellungen Seite 15 / 34 5.2.1 Datenbank-Wachstum (Filegrowth) Ist der Platz innerhalb der Datenbank zu klein, so wird nach gewissen Abständen mehr Platz alloziert. Dies bewerkstelligt das DBMS automatisch und die standardmässige Einstellung dafür ist 10 Prozent. Dies hat aber Nachteile betreffend Performance, da sich so in der physischen Festplatte Fragmente bilden. Der Schreib-/Lese-Zugriff auf eine fragmentierte Festplatte benötigt sehr viel mehr Zeit. Deshalb sollte eine Festplatte nach einer gewissen Zeit defragmentiert werden. Um die Fragmentierung der Festplatte möglichst minimal zu halten, sollte die Wachstumsrate der Datenbank-Datei und der entsprechenden Log-Datei mit einer festen Grösse versehen werden. Je nach freier Plattenkapazität und Grösse der Datenbank variiert der Wert sehr stark. Geben Sie daher für die momaster- und mouser-datenbank eine fixe Grösse des Wachstums jeweils für das Datenbank-Daten- und das Transaction-Log an. Anmerkung: Bei einer momaster-db-grösse von 1.8 GB, wie es in der Abbildung rechts zu sehen ist, sollte wenn möglich ein Growup von 500 MB für die Datenbankdatei gewählt werden. Für das entsprechende Transaction-Log ein Growup von ca. 400 MB. Als Einstellungen für die mouser-datenbank wären ein Growup von ca. 200-300 MB für die Datenbankdatei und 200 MB für das Transaction-Log zu empfehlen.
Seite 16 / 34 Datenbank-Einstellungen 5.2.2 Statistiken Der SQL Server führt für sich Statistiken, um seine Zugriffe zu optimieren. Beim Löschen oder Hinzufügen von Daten sollten auch die Statistiken aktualisiert werden. Dies wirkt sich positiv auf die Performance aus. Daher sind die Schalter Auto Create Statistics und Auto Update Statistics unbedingt zu aktiveren.
Datenbank-Einstellungen Seite 17 / 34 5.2.3 Recovery Mode & Torn page Stellen Sie unter der Rubrik Recovery das Sicherungsmodel auf Simple. Falls Sie den Wert auf Full ändern möchten, müssen Sie die freie Diskkapazität immer im Auge behalten und gegebenenfalls (Lösch-)Massnahmen einleiten. Aktivieren Sie zusätzlich den Schalter Torn page detection, damit korrupte Seiten gefunden und korrigiert werden können.
Seite 18 / 34 Wartungsplan 6 Wartungsplan Mit einem Wartungsplan haben Sie die Möglichkeit, auf einfache Art und Weise eine Datenbank zu optimieren (reindexieren der Datenbank und aktualisieren der Statistiken) und zu sichern. Sie können mehrere Wartungspläne erstellen, die zeitabhängig (täglich oder wöchentlich) ablaufen. Vorgängig sollten Sie aber allfällig vorhandene Backup-Jobs löschen, da in einem Wartungsplan ebenfalls ein Backup definiert wird. 6.1 Neuer Wartungsplan anlegen Erweitern Sie im Enterprise-Manager den Eintrag Management. Anschliessend wählen Sie mittels rechten Mausklicks Database Maintenance Plans an und wählen Sie New Maintenance Plan aus.
Wartungsplan Seite 19 / 34 Anschliessend drücken Sie Weiter. 6.2 Wartungsplan für System-Datenbanken Wir wollen einen Wartungsplan für alle System-Datenbanken erstellen. Wählen Sie deshalb die Option All System databases aus und drücken Sie Weiter.
Seite 20 / 34 Wartungsplan 6.2.1 Reindexierung Ein Reindexieren macht für Systemdatenbanken keinen Sinn. Deshalb lassen wir dieses Kapitel aus und gehen weiter. 6.2.2 Integrität Der Integritäts-Check macht für Systemdatenbanken auch keinen Sinn. Wir lassen dieses Kapitel aus und gehen weiter.
Wartungsplan Seite 21 / 34 6.2.3 Backup Nun wollen wir alle System-Datenbanken sichern. Aktiveren Sie die Schalter: Backup the database as.. und Verify the integrity of.. Unter Location to store wählen wir die Option Disk aus. Den Zeitpunkt, wann der Backup starten soll, können wir mittels des Knopfs Change verändern. Anmerkung: Die Dauer der Backups für System-Datenbanken, dauert in der Regel nicht länger als 5 Minuten. Haben Sie den Backup konfiguriert, drücken Sie den Knopf Weiter.
Seite 22 / 34 Wartungsplan Hier geht es um die Ablage der Backup-Dateien. Also wo das Backup hingeschrieben werden soll. Je nach Backup-Philosophie die Sie haben, wählen Sie das Standard Verzeichnis oder in ein anderes Ihrer Wahl. Aktivieren Sie die Schalter, Create a subdirectory for each database und Remove.
Wartungsplan Seite 23 / 34 6.2.4 Transaction-Log Backup Eine Sicherung der Transaction-Log-Dateien für die System-Datenbanken macht keinen Sinn und kann ausgelassen werden.
Seite 24 / 34 Wartungsplan 6.2.5 Reporting Hier geben Sie an, wo die Log-Dateien hingeschrieben werden sollen. Diese nehmen sehr wenig Platz ein und sind immer hilfreich. Wählen Sie den Ort aus, wo die Log-Dateien hingeschrieben werden sollen. Aktivieren Sie den Schalter Delete text report files. und geben Sie an, wieviele Tage oder Wochen Sie die Log-Dateien aufbewahren wollen. Belassen Sie die Standardeinstellungen bezüglich des Reportings und drücken Sie den Knopf Weiter, um den Wartungsplan abzuschliessen.
Wartungsplan Seite 25 / 34 Geben Sie dem Wartungsplan einen sinnvollen Namen. Ein Beispiel wäre hier: Maintenance Plan for System-DB Wartungsplan für System-DB
Seite 26 / 34 Wartungsplan 6.3 Wartungsplan für User-Datenbanken Kreieren Sie einen neuen Wartungsplan gemäss Kapitel 6.1 und drücken Sie den Knopf Weiter. Wir wollen einen Wartungsplan für alle User-Datenbanken erstellen. Wählen Sie deshalb die Option All user databases aus und drücken Sie Weiter.
Wartungsplan Seite 27 / 34 6.3.1 Reindexierung User-Datenbanken sollten regelmässig reindexiert werden. Für mediaoptimizer-datenbanken ist dies sehr zu empfehlen, da sich eine Reindexierung positiv auf die Performance auswirkt. 6.3.1.1 Indexierungsgrad Der Indexierungsgrad gibt an, wieviel Prozentanteile vom Inhalt einer Tabelle indexiert werden soll. Bei 0 % wird keine Indexierung vorgenommen, bei 100% wird der gesamte Inhalt jeder Tabelle indexiert. Steht eine Suchabfrage bei einer nicht indexierten Tabelle an, so muss jede Zeile gelesen werden, bis das Betreffende gefunden wurde. Dies kostet bei grossen Tabellen viel Zeit. Steht eine Suchabfrage bei einer Tabelle an, die einen sehr hohen Indexierungsgrad besitzt, muss nicht jede Zeile gelesen werden, aber dafür wird beim Durchforsten der Indextabelle viel Zeit verbraucht. Es gibt daher keine Regel oder Empfehlung für ein ideales Mass der Indexierung. Die Standardeinstellung bei einer Indexierung ist 10%. In unserem Beispiel wurde 15% gewählt. Den Zeitpunkt wann die Reindexierung starten soll, können Sie mittels des Knopfs Change verändern. Einmal wöchentlich eine Reindexierung genügt. Eine Reindexierung dauert für die Datenbank momaster und mouser in der Regel 30-60 Minuten.
Seite 28 / 34 Wartungsplan 6.3.2 Integrität Aktivieren Sie die Schalter Check database integrity und Include indexes. Anschliessend definieren Sie, wann der Integritäts-Check gestartet werden soll. Eine wöchentliche Reindexierung genügt.
Wartungsplan Seite 29 / 34 6.3.3 Backup Nun wollen wir alle User-Datenbaken sichern. Aktivieren Sie die folgenden Schalter: Backup the database as.. und Verify the integrity of.. Unter Location to store wählen wir die Option Disk aus. Den Zeitpunkt, wann der Backup starten soll, können wir mittels des Knopfs Change verändern. Haben Sie den Backup konfiguriert, drücken Sie den Knopf Weiter.
Seite 30 / 34 Wartungsplan Hier geht es um die Ablage der Backup-Dateien, also wo das Backup hingeschrieben werden soll. Abhängig von Ihrer Backup-Philosophie wählen Sie das Standard Verzeichnis oder ein anderes Ihrer Wahl. Aktivieren Sie den Schalter Create a subdirectory for each database. So wird für jede System-Datenbank ein entsprechendes Verzeichnis kreiert und die betreffende Sicherungsdatei hineingeschrieben. Aktivieren Sie auch den Schalter Remove
Wartungsplan Seite 31 / 34 6.3.4 Trans-Log Backup Im MS SQL-Server kann man die Transaction-Log-Dateien sichern. Ob das Transaction-Log gesichert werden soll, liegt im Ermessen des Datenbank-Administrators. Zu erwähnen ist aber, dass das Sichern sehr viel Platz braucht und es mehrmals am Tag, evtl. auch stündlich zu erfolgen hat. Sonst würde es keinen Sinn machen.
Seite 32 / 34 Wartungsplan Hier geht es um die Ablage der Backup-Dateien. Also wo das Backup hingeschrieben werden soll. Je nach Backup-Philosophie die Sie haben, wählen Sie das Standard Verzeichnis oder ein anderes Ihrer Wahl. Aktivieren Sie den Schalter, Create a subdirectory for each database. So wird für jede System-Datenbank das entsprechende Verzeichnis kreiert und die betreffende Sicherungsdatei hineingeschrieben. Aktivieren Sie auch den Schalter Remove
Wartungsplan Seite 33 / 34 6.3.5 Reporting Hier geben Sie an, wo die Log-Dateien des Wartungsplans hingeschrieben werden sollen. Diese nehmen sehr wenig Platz ein und sind immer hilfreich. Wählen Sie den Ort aus, wo die Log-Dateien hingeschrieben werden sollen. Aktivieren Sie den Schalter Delete text report files. und geben Sie an, wieviele Tage oder Wochen Sie die Log-Dateien aufbewahren wollen. Belassen Sie die Standardeinstellungen bezüglich Reporting und drücken Sie den Knopf Weiter, um den Wartungsplan abzuschliessen.
Seite 34 / 34 Wartungsplan Geben Sie dem Wartungsplan einen sinnvollen Namen. Ein Beispiel wäre hier: Maintenance Plan for User-DB Wartungsplan für User-DB