SQL-Server Performance

Hier wird beschrieben, wie die Performance des SQL-Servers optimiert wird.
Je mehr Anwender auf die Datenbank zugreifen, desto wichtiger ist das Befolgen dieser Empfehlungen.
Auf Einzelplatz-Installationen (zB Access und SQL-Server auf einem Notebook) lässt sich Vieles davon nicht machen - ist aber bei nur einem Anwender nicht notwendig.

Hardware

Die Daten der Datenbank(en) befinden sich in Dateien die <NameDerDatenbank>.mdf heißen. Zum Beispiel: StaffSupplyDaten.mdf
Diese Datei ist auch nach Jahren mit > 10 Anwendern nur wenige Gigabyte groß.
SQL-Server liest und schreibt in dieser Datei in 64 kB Blöcken. Das allerdings sehr, sehr häufig! Wichtig ist also nicht die Größe der Festplatten (je 128 GB sind ausreichend), sondern nur die IOPS (Input - Output-per-Sekunde).

Zu jeder Datenbank gehört eine zweite Datei, die <NameDerDatenbank>.ldf heißt. Zum Beispiel: StaffSupplyDaten.ldf
In dieser Protokolldatei werden alle Änderungen protokolliert. Daher wird in diese Datei praktisch nur geschrieben und kaum gelesen. Da jede Ändernung der Daten hier protokolliert wird, ist der schreibende Zugriff sehr, sehr häufig!

Eigener Windows-Server nur für SQL-Server

Die optimale Lösung, weil damit sichergestellt ist, dass SQL-Server nicht durch andere Aktivitäten auf dem Server fallweise deutlich schlechtere Antwortzeiten liefert.

Programm SQL Server

Das Programm SQL Server wird ganz normal wie alle Programme in C:\Programme installiert.
Die Daten gehören aber nicht auf die Systemplatte! Und auch nicht zusammen mit allen möglichen Dateien auf ein Laufwerk oder RAID für Daten!

Eigene Festplatte(n) für SQL-Server Daten

Festplatte für Daten

Optimal ist eine eigene Festplatte (nicht nur Partition!) für die *.mdf-Datei(en). Ich nenne sie M:
Diese Platte muss mit 64 kB Blöcken formatiert werden!
Verwenden Sie Enterprise SSD Platten (write-intensiv)! Entscheidend für die Auswahl ist ein hoher Wert für Random Write IOPS.
Nur der SQL-Server und der Administrator haben Berechtigungen auf dieser Platte.
In einem Ordner M:\DATA liegen dann die *.mdf-Datei(en).
In einem Ordner M:\BACKUP_LOG liegen die Sicherungen des Transaktionsprotokolls (in der Arbeitszeit alle 15 Minuten erstellt).

Festplatte für Transaktionsprotokoll und tempdb

Optimal ist eine eigene Festplatte (nicht nur Partition!) für die *.ldf-Dateien. Ich nenne sie L:
Diese Platte muss mit 64 kB Blöcken formatiert werden!
Verwenden Sie Enterprise SSD Platten (write-intensiv)! Entscheidend für die Auswahl ist ein hoher Wert für Random Write IOPS.
Nur der SQL-Server und der Administrator haben Berechtigungen auf dieser Platte.
In einem Ordner L:\LOG liegen dann die *.ldf-Datei(en).
In einem Ordner L:\TEMPD liegt die Datenbank tempdb.
In einem Ordner L:\BACKUP liegen die Sicherungen der Daten (jede Nacht eine Vollsicherung, in der Mittagspause eine Differentialsicherung).

Aus Gründen der Performance (IOPS) werden getrennte Platten für Daten und Transaktionsprotokoll verwendet.
Aus Gründen der Sicherheit wird "kreuzweise" gesichert (Daten auf Log-Festplatte, Logs auf Datenfestplatte).

RAM-Disk

Eine RAM-Disk ist ein Teil des Arbeitsspeichers, der beim Booten als virtuelles Laufwerk eingerichtet wird. Dieses Laufwerk ist ca. 10 mal schneller als eine Solid-State-Disk. Wenn viel Arbeitsspeicher vorhanden ist kann man die Datenbank tempdb auf eine RAM-Disk legen.
Das beschleunigt die Verarbeitung großer Datenmengen und schont die Festplatten.

Kompromiss: eine Festplatte für Daten, Transaktionsprotokoll und tempdb

Kleine Enterprise SSD Platten (write-intensiv) kosten zirka 200 €, das ist also sicher kein Grund, statt zwei Platten nur Eine zu verwenden. Aber falls aus Platzgründen, oder weil nur mehr ein Anschluss für Festplatten frei ist, nur eine Festplatte für SQL-Server möglich ist, dann ist das immer noch besser als die Dateien zusammen mit allen möglichen anderen Daten auf einer Platte unterzubringen.

RAID

Für Transaktionsprotokoll und tempdb (L:) ist nur ein RAID 1 oder RAID 1+0 geeignet. Nicht aber ein RAID 5 (Stichwort Write Penalty)!
Für die Daten (M:) ist ein RAID 1 oder RAID 1 + 0 zu bevorzugen, aber auch ein RAID 5 geeignet.

Arbeitspeicher

Die Express-Version des SQL-Servers verwendet genau ein GB Arbeitsspeicher.

Die Standard-Version des SQL-Servers benötigt mindestens 4 GB Arbeitsspeicher. Bei größeren Datenbanken mehr.

Software - Einstellungen

Arbeitspeicher

Zu wenig Arbeitsspeicher verlangsamt den SQL-Server dramatisch!

  1. Im SSMS (SQL Server Management Studio) die Instanz des SQL-Servers (zB SERVER\STAFFSUPPLY ) mit der rechten Maustaste anklicken.
    Ein Kontextmenü wird sichtbar.
  2. Auf Eigenschaften klicken
    Das Fenster Servereigenschaften wird geöffnet.
  3. Unter Seite auswählen auf Arbeitsspeicher klicken.
  4. Werte für Minimaler Serverarbeitsspeicher eintragen:
    Express-Version: 1024
    Standard-Version: 4096 minimal, wenn möglich mehr, maximal 128 GB
  5. Werte für Maximaler Serverarbeitsspeicher eintragen:
    Express-Version: 1024
    Standard-Version: kann leer bleiben, sonst: so viel wie möglich, maximal 128 GB, und natürlich nicht weniger als bei Minimal eingestellt.
  6. Auf OK klicken
  7. die Instanz des SQL-Servers (zB SERVER\STAFFSUPPLY ) mit der rechten Maustaste anklicken.
    Ein Kontextmenü wird sichtbar.
  8. Neu starten anklicken
    Fenster Möchten Sie den MSSQL$STAFFSUPPLY-Dienst auf <SERVERNAME> wirklich neu starten?
  9. Auf Ja klicken.

Anmerkung: mehrere Instanzen von SQL-Server verwalten den Arbeitsspeicher nicht intelligent.
Sondern die zuerst gestartete Instanz nimmt sich den maximalen Speicher. Wenn weitere Instanzen gestartet werden, gibt sie so lange Speicher ab, bis der Minimum-Wert erreicht ist. Unabhängig von der tatsächlichen Verwendung, Arbeitslast usw. Deshalb sind obige Einstellungen so wichtig, speziell bei mehr als einer Instanz!

Sichern

Während der Arbeitszeit gehören alle 15 Minuten die Transaktionsprotokolle gesichert. Dieser Vorgang benötig nur sehr wenig Resourcen und verlangsamt den SQL-Server kaum.

Jede Nacht gehört eine Vollsicherung erstellt. Dieser Vorgang benötigt viele Resourcen und bremst den SQL Server stark! Daher nicht während der Arbeitszeit!

Jede Mittagspause gehört eine Differenzsicherung erstellt. Dieser Vorgang benötigt viele Resourcen und bremst den SQL Server stark! Daher nicht während der Arbeitszeit!

Natürlich gehören die Sicherungsdateien dann an einen entfenten und sicheren Ort kopiert (abwechselnd auf mehrere Wechseldatenträger wie USB-Stick oder Cloud). Aber das hat nichts mehr mit Performance zu tun.


Literaturempfehlung

Ulrich B. Boddenberg:
SQL Server 2014 für Professionals
HANSER