Skip to content

Wie behebe ich den Mangel an verfügbarem Speicher in meiner RDS für SQL Server-Instance?

Lesedauer: 7 Minute
0

Ich möchte Probleme mit wenig verfügbarem Speicher in meiner Amazon Relational Database (Amazon RDS) für SQL Server-Instance beheben.

Lösung

Überwachung der Speicherauslastung auf deiner Instance

Um die Speicherauslastung zu überwachen, kannst du Amazon CloudWatch-Metriken oder Enhanced Monitoring verwenden.

CloudWatch-Metriken verwenden

Um zu geringen Arbeitsspeicher zu identifizieren, verwende die Amazon RDS-Konsole, um die FreeableMemory CloudWatch-Metrik zu überwachen.

Überwache die folgenden Metriken, um einen Anstieg der Workload zu erkennen, wenn der verfügbare Speicher knapp ist:

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

Informationen zu den vorherigen Metriken findest du unter Amazon CloudWatch-Metriken auf Instance-Ebene für Amazon RDS.

Enhanced Monitoring aktivieren

Verwende Enhanced Monitoring, um Betriebssystem-Metriken (OS) für Microsoft SQL Server zu überwachen. Wenn du Enhanced Monitoring aktivierst, kannst du das Metrikerfassungsintervall auf 1, 5, 10, 15, 30 oder 60 Sekunden festlegen. Die Standardeinstellung ist eine Granularität von 60 Sekunden, aber es hat sich bewährt, die Granularität auf 1 oder 5 Sekunden festzulegen.

Du kannst auch Enhanced Monitoring verwenden, um CloudWatch-Alarme zu erstellen, um die Speichernutzung meiner Amazon RDS für SQL Server DB Instance zu überwachen.

Den Speicher begrenzen, den die Amazon RDS-Instance verwendet

Bestimme den Wert max_server_memory für die Instance und stelle dann den Wert max_server_memory auf einen Wert ein, der keinen systemweiten Speicherdruck verursacht.

Bestimme den Wert „max_server_memory“

Verwende die folgende Berechnung, um den Wert max_server_memory für die Instance zu bestimmen:

max_server_memory = total_RAM – (1 GB für OS + memory_basis_amount_of_RAM_on_the_server)

total_RAM entspricht dem gesamten Speicher des Instance-Typs.

memory_basis_amount_of_RAM_on_the_server wird auf folgende Weise bestimmt:

  • Wenn der RAM auf dem Server zwischen 4 GB und 16 GB liegt, behalte 1 GB pro 4 GB RAM bei. Behalte beispielsweise 4 GB für einen Server mit 16 GB RAM bei.

  • Wenn der RAM auf dem Server mehr als 16 GB beträgt, behalte 1 GB pro 4 GB RAM bei bis zu 16 GB. Behalte 1 GB pro 8 GB RAM bei, das größer als 16 GB ist.

Wenn ein Server beispielsweise über 64 GB RAM verfügt, lautet die Berechnung für den max_server_memory wie folgt:

  • 1 GB für das Betriebssystem
  • Bis zu 16 GB RAM: 16/4 = 4 GB
  • Verbleibender RAM größer als 16 GB: (64–16)/8 = 6 GB
  • (1 GB für OS + memory_basis_amount_of_RAM_on_the_server) = 1 + 4 + 6 = 11 GB
  • max_server_memory: 64–11 = 53 GB

max_server_memory einstellen

Um max_server_memory zu ändern, verwende eine benutzerdefinierte Parametergruppe, um den Wert zu konfigurieren. Gib den Wert für max_server_memory in maximaler Serverspeicher (MB) an. Da max_server_memory ein dynamischer Parameter ist, musst du keinen Neustart durchführen, damit die Änderungen wirksam werden.

Hinweis: Nachdem du max_server_memory konfiguriert hast, musst du FreeableMemory kontinuierlich überwachen, um festzustellen, ob der zugewiesene Speicher erhöht oder verringert werden soll.

Überprüfen, ob du SSIS-, SSAS- oder SSRS-Optionen auf der DB-Instance verwendest

Überprüfe die RDS-Optionsgruppe, um festzustellen, ob du die Optionen SQL Server Integration Services (SSIS), SQL Server Analysis Services (SSAS) oder SQL Server Reporting Services (SSRS) auf der DB-Instance verwendest. Der Speicher, den die Optionen verwenden, liegt außerhalb der Einstellung max_server_memory und erhöht die Speicherkapazität der Instance. Wenn du diese Optionen nicht verwendest, ändere die Optionsgruppe, um sie zu entfernen.

Hinweis: Wenn du SSIS, SSAS oder SSRS auf der Instance verwendest, musst du max_server_memory an die Optionen anpassen.

Wenn du beispielsweise SSRS verwendest, lege den SSRS-Wert Maximaler Speicher auf 10 % des Gesamtspeichers der DB-Instance fest. Beispielsweise ergeben 10 % auf einer Instance mit 64 GiB Speicher ungefähr 6,4 GiB. Passe also den Wert max_server_memory auf ungefähr 46 GiB an (64–11–6,4 = 46 GiB).

Datenbankverbindungen überprüfen

Jede Datenbankverbindung, die du zur Instance herstellst, erfordert eine gewisse Speicherzuweisung außerhalb des Pufferpools für Worker-Threads. Daher kann ein Anstieg der DatabaseConnections zu einem Abfall des verfügbaren Speichers führen.

DB-Instance mit Performance Insights überwachen

Du kannst Performance Insights verwenden, um die Datenbankleistung zu analysieren und potenzielle Engpässe zu identifizieren, die die Instance verlangsamen. Verwende das Performance Insights-Dashboard, um Datenbanklast, Wartezeiten, Abfragen, Hosts und Benutzer zu überwachen.

Regelmäßige Wartungsarbeiten an der DB-Instance durchführen

Führe eine regelmäßige Indexwartung durch und halte die Statistiken auf dem neuesten Stand. Stark fragmentierte Indizes können die I/O-Aktivität erhöhen und zu einer höheren Speicherauslastung führen. Außerdem können veraltete Statistiken zu einer ungenauen Kardinalitätsschätzung führen und dazu führen, dass die Datenbank einen suboptimalen Abfrageplan auswählt. Weitere Informationen findest du auf der Microsoft-Website unter Optimieren der Indexverwaltung, um die Abfrageleistung zu verbessern und den Ressourcenverbrauch zu reduzieren. Weitere Informationen findest du unter STATISTIKEN AKTUALISIEREN (Transact-SQL) auf der Microsoft-Website. 

Hinweis: Es hat sich bewährt, die Index- und Statistikwartung außerhalb der Spitzenzeiten oder während eines Wartungsfensters durchzuführen.

PLE und die BCHR überwachen

Überwache Page Life Expectancy (PLE) und Buffer Cache Hit Ratio (BCHR), um den Speicherdruck zu ermitteln. Stelle sicher, dass die Werte für PLE und BCHR so hoch wie möglich sind, um eine optimale Leistung zu erzielen. Wenn die Werte für PLE und BCHR über einen bestimmten Zeitraum konstant niedrig sind, optimiere die Abfragen, die auf Daten zugreifen, oder erhöhe die Instance-Klasse, um mehr Speicherplatz bereitzustellen.

Gehe wie folgt vor, um Performance Insights zur Überwachung der Metriken zu verwenden:

  1. Öffne die Amazon-RDS-Konsole.
  2. Wähle im Navigationsbereich Performance Insights.
  3. Verwende das Suchfeld DB-Instance filtern, um die Instance auszuwählen, die du überwachen möchtest.
  4. Lege den Zeitraum fest, für den du die Metriken überprüfen möchtest. 
  5. Wähle im Metrik-Dashboard Benutzerdefiniertes Dashboard – SQL Server-Datenbank aus, und wähle dann Erstes Widget hinzufügen aus.
  6. Suche im Suchfeld Filtern von Metriken nach Name, Kategorie oder ID nach Page Life Expectancy und wähle sie dann aus.
  7. Wähle Widget hinzufügen.
  8. Wiederhole die Schritte 6 und 7, um Buffer Cache Hit Ratio für das benutzerdefinierte Dashboard auszuwählen.

Weitere Informationen zu PLE und BCHR findest du unter Leistungsobjekte des Puffermanagers auf der Microsoft-Website.

Wenn die Instance unter Speicherdruck steht und PLE und BCHR niedrig sind, erhöht sich die PAGEIOLATCH-Wartezeit. Microsoft SQL Server wartet darauf, dass eine Seite von der Festplatte in den Speicher geladen wird. Möglicherweise siehst du auch, die RESOURCE_SEMAPHORE-Wartezeit, wenn die Speicheranforderung einer Abfrage aufgrund eines geringen Speichers fehlschlägt. Die CPU-Auslastung steigt dann, weil Datenseiten nicht lange genug im Speicher zwischengespeichert werden. In diesem Fall muss Microsoft SQL Server wiederholt auf Daten auf der Festplatte zugreifen.

Die richtige Instance-Größe für die Workload auswählen

Die Speichermenge einer Instance hängt vom Instanz-Typ ab. Stelle sicher, dass du eine Instance-Klasse mit ausreichenden Ressourcen auswählst, damit die DB-Instance über genügend Ressourcen für die Workload verfügt. Wenn eine Instance über weniger Ressourcen verfügt, treten Leistungsprobleme auf. Eine zu große Instance verschwendet Ressourcen.

Beispielsweise stellt die Instance-Klasse „db.r5.8xlarge“ 32 vCPU und 256 GiB Speicher bereit. Wenn du eine Amazon RDS-Instance mit db.r5.8xlarge bereitstellst, teilen sich die folgenden Ressourcen den gesamten 256-GiB-Speicher der Instance-Klasse:

  • Das Betriebssystem
  • Amazon RDS-Prozesse
  • Die Datenbank-Engine
  • Worker-Threads
  • Business Intelligence Suite-Anwendungen wie SSIS, SSAS und SSRS.

Weitere Informationen darüber, wie Microsoft SQL Server Speicher verwendet, findest du im Leitfaden für die Speicherverwaltungsarchitektur auf der Microsoft-Website.

Ressourcennutzung als Grundlage festlegen

Überwache Metriken wie FreeableMemory, Page Life Expectation und Buffer Cache Hit Ratio, um die Ressourcennutzung auf der Instance zu ermitteln. Wenn das Datenvolumen auf der Instance erheblich zunimmt, erhöhe den Wert max_server_memory. Stelle sicher, dass du den Wert max_server_memory proportional zur Änderung des Daten-Volumes erhöhst, um das gleiche Leistungsniveau auf der Instance aufrechtzuerhalten.

Hinweis: Um Komponenten zu identifizieren, die Speicher in SQL Server verwenden, kannst du SQL Server-Tools wie Berichte und DMVs verwenden.

Gehe wie folgt vor, um mithilfe von SQL Server Management Studio (SSMS) die Speicherauslastung von SQL Server zu überprüfen:

  1. Öffne SSMS und stelle dann eine Verbindung zu der Amazon RDS für SQL Server-Instance her.
  2. Klicke im Object Explorer mit der rechten Maustaste auf den Endpunktnamen der Amazon RDS-Instance.
  3. Wähle Berichte, Standardberichte, ** Speicherverbrauch**.

Informationen zum Herunterladen von SSMS findest du unterHerunterladen von SQL Server Management Studio (SSMS) auf der Microsoft-Website. 

Du kannst auch sys.dm_os_memory_clerks abfragen, um die Komponenten zu identifizieren, die den maximalen Speicher in SQL Server verwenden. Weitere Informationen findest du unter sys.dm_os_memory_clerks (Transact-SQL) und Interne Speicherauslastung durch die SQL Server-Engine auf der Microsoft-Website.