SQL Server RAM Konfiguration

Wenn es um die Speicherleistung von SQL Server geht, wird oftmals das sogenannte “Performance Triangle” genannt. Dieses setzt sich zusammen aus Arbeitsspeicher (RAM), dem Prozessor (CPU) und dem allgemeinen Festplattenspeicher.

Arbeitsspeicher (RAM)
Der auf englisch betitelte “Random Access Memory” Speicher ist der Arbeitsspeicher des SQL Servers. Er dient als Kurzzeitspeicher und ist für die Kommunikation und Auslieferung der Daten zum Prozessor zuständig.

Prozessor (CPU)
Die CPU ist das Herzstück des SQL Servers und gleichzeitig der Hauptprozessor. Sie befindet sich auf einem Sockel und ist die zentrale Rechen- & Steuereinheit.

Festplatte
Die Festplatte ist eine Hardware Komponente, die alle Inhalte digital speichert. Darunter fallen sowohl Daten, als auch beispielsweise das Betriebssystem. Unterschieden wird zwischen HDD und SSD Festplatten. Wobei hier der gravierende Unterschied eigentlich nur die Bauweise dessen ist. HDD Festplatten bieten Vorteile in der Wiederherstellung von Daten, sowie mehr Speichervolumen. Wohingegen SSD Festplatten schneller performen.

Grundlegendes zur Speicherverwaltung- & Konfiguration in SQL Server

Jeder SQL Server verfügt über eine zentrale Speicherverwaltungseinheit, die basierend auf der Arbeitslast des Systems eine automatische Speicherverwaltung durchführt. Für jeden, der mit Datenbanken, SQL Servern oder generell im Tech-Business tätig ist, ist die Speichergröße hinsichtlich Leistung der verschiedenen Anwendungen essentiell.

Kommt es zur Konfiguration der Speicher, gibt es auch in SQL Server einige Standardwerte, die automatisch verwendet werden. Standardmäßig wird der SQL Server den ganzen verfügbaren Speicherplatz verwendet, auch wenn in den Datenbanken keine sichtbaren Aktivitäten vorhanden sind. Sind diese Standardwerte jedoch falsch oder nicht den eigenen Bedürfnissen entsprechend, können diese mit einem Fill-and-Flush Algorithmus konfiguriert werden.

Die Größe des Speichers liegt mitunter an den verschiedenen Komponenten des Systems. Jedoch ist ein guter Ausgangspunkt der Speicherkonfiguration bei ca. 70 – 80%. Hier müssen Sie jedoch individuell betrachten, ob es nicht noch weitere Anwendungen gibt, die auch einen bestimmten Speicherplatz beanspruchen und bei fehlender Kapazität nicht gut performen.

Über sp_configure oder in der SSMS-GUI können Sie die Speichereinstellungen wie folgt vornehmen.

Die Zahl “2147483647” (der maximale Wert eines Integers) bedeutet, dass der SQL Server keine Speicherobergrenze hat und den ganzen Speicher auf diesem SQL Server verwendet. Die minimum server memory beschreibt den Mindestwert des SQL Server Speichers. Diese Menge wird als Mindestmenge an benutzbarem Speicher beibehalten. Die maximum server memory ist im Gegenteil zum Mindestwert, die Obergrenze des Speichervolumens des SQL Servers. Generell bilden beide Werte (Minimum & Maximum) die Grenzen für den Pufferpool. Der Pufferpool ist der größte Speicherbereich, der von SQL Server belegt wird. Folgende Komponenten sind beispielsweise im Pufferpool enthalten:

  • Datenbankseiten-Cache
  • Interne Protokollcaches
  • Prozedur Cache
  • Abfrageplan Cache
  • Abfragen der Arbeitslast
  • Sperren
  • Verbindungskontext
  • Abfrageoptimierungen
  • Datenstrukturen auf Systemebene

Wichtig: Wird der max server memory zu hoch eingerichtet, kann es zu einer internen Konkurrenz zwischen anderen Instanzen und RAM kommen, die auf dem gleichen Host ausgeführt werden. Wird der Wert zu niedrig gelegt, können Arbeitsspeichermangel zu Leistungsproblemen führen.

Die Serverleistung wird von wichtigen Metriken wie z.B. verfügbare MB, Puffer-Cache und PLE bestimmt. Der Puffer-Cache ist beispielsweise für jede Anwendung essentiell. Daher sollte hier die konstante Auslastung bei ca. 90% liegen. Verfügbare Bytes geben lediglich den Hinweis darauf, wie viel Speicher bei der Verwendung verfügbar ist. Eine andere, beliebte Metrik für die Speichernutzung ist die PLE. PLE steht für “Page Life Expectancy” und gibt einen Hinweis auf die Zeit, wie lange eine bestimmte Seite im Pufferpool bleibt. Ein allgemeiner Richtwert liegt hier bei ca. 300 Sekunden.

Mit dem folgenden T-SQL-Skript können wir die PLE auslesen:

SELECT *
FROM sys.dm_os_performance_counters
WHERE [counter_name] = 'Page life expectancy'

Empfehlungen und Best Practices

Wenn es zur Konfiguration von Speicherplatz kommt, sollte man einige Aspekte vorab nicht außer Acht lassen.

  1. Jeweils 1 GB Speicher ist für das Betriebssystem reserviert
  2. Jeweils 1 GB Speicher pro 4 GB RAM, nach den ersten 4GB, bei bis zu 16 GB RAM
  3. Jeweils 1 GB Speicher pro 8 GB RAM bei mehr als 16 GB RAM

Möchten Sie jetzt einen 32 GB RAM Datenbankserver nutzen, sollten Sie folgende Speicher zuweisen:

  1. 1 GB als Mindestzuordnung
  2. +3 GB (16 GB RAM werden benötigt – 4 GB = 12 GB / 4 GB = 3 GB)
  3. +2 GB (32 GB RAM insgesamt – 16 GB = 16 GB / 8 GB = 2 GB)

Dem Betriebssystem auf dem 32 GB RAM Datenbankserver werden 7 GB reserviert. Die maximale Speicherkapazität sollte bei 25 GB liegen. Bei beispielsweise einem 64 GB Server sollten 10 GB für das Betriebssystem und die Obergrenze bei 54 GB liegen.

Mit dem WMI (Windows Management Instrumentation) haben Sie die Möglichkeit, Informationen über Hardware, installierte Software, dem Betriebssystem oder Registrierungen zu extrahieren, eventuelle Änderungen vorzunehmen und diese Informationen zu klassifizieren.

Folgende Klassen existieren:

TotalVisibleMemorySize zeigt den gesamten physischen Speicher an, auf den das Betriebssystem zugreifen kann.

FreePhysicalMemory zeigt uns an, wie viel physischer Speicher frei ist.

TotalVirtualMemorySize ist der gesamte virtuelle Speicher, der dem Betriebssystem zur Verfügung steht. Dies umfasst den installierten physischen Speicher, sowie die Größe der Auslagerungsdatei.

FreeVirtualMemory zeigt uns ähnlich zu FreePhysicalMemory den freien vorhandenen Speicherplatz an, jedoch hier im Paging-Speicher.

Mit der folgenden T-SQL Abfrage können wir Serverseitig einige Speicherinformationen auslesen:

SELECT
  physical_memory_in_use_kb/1024 Physical_memory_in_use_MB, 
  large_page_allocations_kb/1024 Large_page_allocations_MB, 
  locked_page_allocations_kb/1024 Locked_page_allocations_MB,
  virtual_address_space_reserved_kb/1024 VAS_reserved_MB, 
  virtual_address_space_committed_kb/1024 VAS_committed_MB, 
  virtual_address_space_available_kb/1024 VAS_available_MB,
  page_fault_count Page_fault_count,
  memory_utilization_percentage Memory_utilization_percentage, 
  process_physical_memory_low Process_physical_memory_low, 
  process_virtual_memory_low Process_virtual_memory_low
FROM sys.dm_os_process_memory;

Exkurs: Wie viel Speicher haben eigentlich SQL Server?

Um herauszufinden, wie viele Daten auf einem SQL Server gehostet werden können, geben wir Ihnen hiermit eine kleine Übersicht der standardisierten SQL Server RAM Größen:

  • 84 GB Daten – 16 GB RAM
  • 100 GB Daten – 19 GB RAM
  • 166 GB Daten – 32 GB RAM
  • 289 GB Daten – 55 GB RAM

In diesem Artikel haben wir nun zusammengefasst, welche Speicher es in SQL Server gibt, wie man sie konfiguriert und optimieren kann.