Optimieren des Datenbankspeichers
Um den Datenbankspeicher zu optimieren, sollten Sie eine proportionale Füllung und eine tempdb-Konfiguration in Erwägung ziehen.
Was ist die proportionale Füllung?
Wenn Sie 1 Gigabyte Daten in eine SQL Server-Datenbank mit zwei Datendateien einlesen, wäre es nur logisch, dass jede der Datendateien um etwa 512 Megabyte wächst. Dieses gleichmäßige Wachstum ist jedoch nicht unbedingt der Fall, da SQL Server Daten in Datendateien auf unterschiedlichen Volumes einfügt, basierend auf der Größe der Datendatei. Wenn Ihre Datendateien in diesem Beispiel jeweils 2 Gigabyte groß wären, würden Sie eine gleichmäßige Verteilung der Daten erwarten. Wenn jedoch eine der Datendateien 10 GB, die andere aber nur 1 GB groß wäre, würden etwa 900 MB in die erste Datendatei und 100 MB in die zweite eingefügt. Dieses Verhalten tritt zwar in jeder Datenbank auf, aber aufgrund der erwartungsgemäß hohen Schreibaktivität für tempdb könnte ein unausgeglichenes Schreibmuster zu einem Engpass für die größte Datei führen, da dort die Mehrzahl der Schreibvorgänge erfolgt.
Konfiguration von tempdb in SQL Server
In SQL Server 2016 wurde dieses Verhalten geändert: Die Anzahl der beim Setup verfügbaren CPUs wird ermittelt, die entsprechende Anzahl von Dateien wird konfiguriert (bis zu 8), und dann wird die Größe der Datendateien gleichmäßig angepasst. Darüber hinaus ist das Verhalten der Ablaufverfolgungsflags 1117 und 1118 in die Datenbank-Engine integriert, jedoch nur für tempdb. Für umfangreiche tempdb-Arbeitsauslastungen kann es von Vorteil sein, die Anzahl von tempdb-Dateien auf die Anzahl von CPUs auf dem Computer zu erhöhen (also auf mehr als 8).
SQL Server verwendet tempdb für viel mehr als nur zum Speichern benutzerdefinierter temporärer Tabellen. Einige Beispiele für weitere Verwendungsmöglichkeiten von tempdb: Arbeitstabellen zum Speichern von Zwischenergebnissen von Abfragen, Sortiervorgänge, Versionsspeicher für die Zeilenversionsverwaltung. Aufgrund dieser Nutzungsmöglichkeiten ist es wichtig, die tempdb in dem Speicher mit der geringstmöglichen Latenz zu platzieren und die Datendateien ordnungsgemäß zu konfigurieren.
Vor SQL Server 2016 verfügte die tempdb standardmäßig nur über eine Datendatei. Diese einzelne Datei bedeutete, dass es zu Konflikten kommen konnte, wenn mehrere Prozesse versuchten, auf Systemseiten der tempdb-Datenbank zuzugreifen. Eine gängige Lösung für dieses Problem war die Aktivierung des Ablaufverfolgungsflags 1118, das die Art und Weise änderte, in der Erweiterungen zugeordnet wurde. Eine weitere gängige Best Practice-Empfehlung bestand darin, mehrere tempdb-Datendateien zu erstellen. Da SQL Server einen Algorithmus zur proportionalen Füllung für Datenbank mit mehreren Datendateien verwendet, musste auch sichergestellt werden, dass diese Dateien dieselbe Größe aufwiesen und im selben Verhältnis wuchsen. Zur Unterstützung dieses Szenarios verwendeten viele DBAs das Ablaufverfolgungsflag 1117, das alle Datenbanken mit mehreren Datendateien dazu zwang, diese Dateien im selben Verhältnis zu vergrößern.