Direkt zum Inhalt

Wie optimiere ich den Speicherverbrauch in meiner Amazon RDS für SQL Server-DB-Instance?

Lesedauer: 7 Minute
0

Meine Instance von Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server belegt mehr Speicherplatz als erwartet. Ich möchte meinen Festplattenspeicher optimieren.

Kurzbeschreibung

Um den Speicherverbrauch zu optimieren, behebe zunächst unmittelbare Speicherprobleme. Identifiziere dann die Komponenten, die Speicherplatz verbrauchen. Wenn sich deine Instance im Status Storage Full (Speicher voll) befindet, skaliere deinen Speicher oder migriere zu einer neuen RDS-DB-Instance mit ausreichender Speicherkapazität. Wenn deine DB-Instance über verfügbaren Speicherplatz verfügt, identifiziere die Komponenten, die Speicherplatz verbrauchen, und wende für jede Komponente Optimierungstechniken an.

Du kannst die FreeStorageSpace-Metrik in Amazon CloudWatch verwenden, um den verfügbaren Speicherplatz für eine DB-Instance zu überwachen. Die FreeStorageSpace-Metrik beschreibt nicht, wie die SQL Server-Engine den verfügbaren Speicherplatz nutzt. Überwache diese Metrik regelmäßig und aktiviere die automatische Speicherskalierung, damit dir nicht der Speicherplatz ausgeht.

Lösung

Speicherproblemen bei einer Instance von Amazon RDS für SQL Server im Status „Storage Full“ (Speicher voll) beheben

Du kannst keine grundlegenden Operationen ausführen, wenn deine DB-Instance im Status Storage Full (Speicher voll) feststeckt. Weitere Informationen findest du unter Wie löse ich Probleme, die auftreten, wenn den Amazon-RDS-DB-Instances der Speicherplatz ausgeht?

Bei einigen DB-Instances von RDS für SQL Server gibt es Einschränkungen, wie du den Speicher ändern kannst. Wenn die DB-Instance nicht geändert werden kann, ist die Option Zugewiesener Speicher in der Amazon-RDS-Konsole deaktiviert.

Hinweis: Skalierungsspeicher und automatische Speicherskalierung werden in Instances von RDS für SQL Server, die Magnetspeicher verwenden, nicht unterstützt.

Um den Speicher auf einer Instance zu skalieren, wenn die Änderungsoption nicht verfügbar ist, verwende die native Sicherung und Wiederherstellung, um Daten zu einer neuen DB-Instance zu migrieren. Stelle dann sicher, dass die neue DB-Instance über bereitgestellte Eingabe/Ausgabe pro Sekunde (IOPS) verfügt oder den Allzweck (SSD)-Speichertyp hat. Verwende alternativ den AWS Database Migration Service (AWS DMS), um deine Daten auf die neue DB-Instance zu migrieren. Weitere Informationen findest du unter Verwendung einer Microsoft SQL Server-Datenbank als Quelle für AWS DMS.

Führe den Befehl describe-valid-db-instance-modifications aus, um die gültigen Speicheroptionen für die DB-Instance anzuzeigen:

describe-valid-db-instance-modifications

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Troubleshooting errors for the AWS CLI (Problembehandlung bei der AWS CLI). Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Bei DB-Instances, für die die automatische Speicherskalierung aktiviert ist, erfolgt die automatische Speichererweiterung nur unter bestimmten Bedingungen. Wenn die automatische Skalierung deinen Speicher nicht wie erwartet erweitert, kannst du den Speicher manuell erweitern. Beachte jedoch, dass sowohl die automatische als auch die manuelle Speichererweiterung Einschränkungen haben. Weitere Informationen zu den Bedingungen und Einschränkungen der automatischen Skalierung findest du unter Automatische Kapazitätsverwaltung mit der automatischen Speicherskalierung von Amazon RDS.

Speicherverbrauch nach Datenbank analysieren

Um Informationen über die Nutzung des physischen Speicherplatzes bei DB-Instances von RDS für SQL Server zu erhalten, führe eine Abfrage ähnlich dem folgenden Beispiel aus:

SELECT D.name AS [database_name]    
    , F.name AS [file_name]
    , F.type_desc AS [file_type]
    , CONVERT(decimal(10,2), F.size * 0.0078125) AS [size_on_disk_mb]
    , CONVERT(decimal(10,2), F.max_size * 0.0078125) AS [max_size_mb]
FROM sys.master_files AS F
INNER JOIN sys.databases AS D
    ON F.database_id = D.database_id;

Dateien vom Typ ROWS enthalten die Datenbankdaten, und Dateien vom Typ LOGS enthalten Transaktionsprotokolle für laufende Transaktionen.

Weitere Informationen findest du unter sys.master_files (Transact-SQL) auf der Microsoft-Website.

Hinweis: Die Systemansicht sys.master_files zeigt die Startgröße von tempdb. Sie spiegelt nicht die aktuelle Größe der tempdb wider.

Führe die folgende Abfrage aus, um die aktuelle Größe von tempdb zu überprüfen:

select name AS [database_name], physical_name AS [file_name],
convert(decimal(10,2),size*0.0078125) AS [size_on_disk_mb]
from tempdb.sys.database_files;

Grundlegendes zum Speicher der SQL Server-Engine

Um den Speicher zu optimieren, identifiziere zunächst die Komponenten, die den meisten Speicherplatz beanspruchen, und mache dich damit vertraut, wie die SQL Server-Engine den Speicher nutzt. Der Speicher der SQL Server-Engine umfasst die folgenden Kategorien.

Datenbankdateien

Du kannst den Gesamtspeicher, der von einer einzelnen Datenbank genutzt wird, in Zeilen-, Index- und freien Speicherplatz in der aktuell aktiven Datenbank aufschlüsseln. Führe die folgende Abfrage aus, um den Gesamtspeicher aufzuschlüsseln:

use db_name
EXEC sp_spaceused;

Hinweis: Ersetze db_name durch den Namen deiner Datenbank.

Transaktionsprotokolldateien

Führe die folgende Abfrage aus, um zu ermitteln, wie viel Speicherplatz von Transaktionsprotokollen verwendet wird:

DBCC SQLPERF(LOGSPACE)

Um weitere Details zur Protokollspeichernutzung der einzelnen Datenbanken zu erhalten, führe die folgende Abfrage aus:

use db_name;

    SELECT
    DB_NAME() AS [Database Name],
    ls.total_log_size_in_bytes / 1048576.0 AS [Total Log Size in MB],
    ls.used_log_space_in_bytes / 1048576.0 AS [Used Log Size in MB],
    (ls.total_log_size_in_bytes - ls.used_log_space_in_bytes) / 1048576.0 AS [Free Log Space in MB],
    ls.used_log_space_in_percent AS [Used Log Space in %],
    ls.log_space_in_bytes_since_last_backup / 1048576.0 AS [Log Since Last Log Backup in MB],
    dls.log_backup_time AS [Last Log Backup Time]
FROM
    sys.dm_db_log_space_usage AS ls
CROSS APPLY
    sys.dm_db_log_stats(DB_ID()) AS dls;

Hinweis: Ersetze db_name durch den Namen deiner Datenbank.

Möglicherweise siehst du freien Speicherplatz in den Transaktionsprotokollen. Um die Zuweisung von übermäßigem freiem Speicherplatz aufzuheben, führe den Befehl DBCC SHRINKFILE aus. Weitere Informationen findest du unter DBCC SHRINKFILE (Transact-SQL) auf der Microsoft-Website.

Verwende die Datei- und Dateigruppenoptionen von ALTER DATABASE (Transact-SQL), um die übermäßige Zuweisung von freiem Speicherplatz für Transaktionsprotokolle zu reduzieren. Die Optionen konfigurieren die Einstellungen für automatisches Wachstum für die Datenbank. Weitere Informationen findest du unter ALTER DATABASE (Transact-SQL) File and Filegroup Options (ALTER DATABASE-Optionen für Dateien und Dateigruppen (Transact-SQL)) auf der Microsoft-Website.

Temporäre Datenbank (tempdb)

Die SQL Server-tempdb wächst automatisch. Wenn die tempdb eine große Menge an verfügbarem Speicherplatz beansprucht, kannst du die tempdb-Datenbank verkleinern.

Hinweis: Wenn du eine tempdb-Datenbank verkleinerst, überprüfe nach dem Ausführen des Befehls die Registerkarte Message (Nachricht) in SQL Server Management Studio (SSMS) auf Fehlermeldungen.

Wenn du die Fehlermeldung „DBCC SHRINKFILE: Page could not be moved because it is a work table page“ erhältst, findest du weitere Informationen unter DBCC FREESYSTEMCACHE (Transact-SQL) und DBCC FREEPROCCACHE (Transact-SQL) auf der Microsoft-Website. Du kannst die DB-Instance auch neu starten, um die tempdb zu löschen.

DB-Instances im Status Storage Full (Speicher voll) können möglicherweise nicht neu gestartet werden. Erhöhe in diesem Fall den zugewiesenen Speicher für die DB-Instance und versuche dann erneut einen Neustart. Weitere Informationen findest du unter Wie behebe ich Probleme, die auftreten, wenn den Amazon RDS-DB-Instances der Speicherplatz ausgeht?

Datenbankindizes

Wenn du einen großen Teil deines verfügbaren Speichers für Indizes verwendest, überprüfe, ob eine Indexoptimierung Platz spart. Um Informationen zur Indexnutzung abzurufen, führe die Abfrage der dynamischen Verwaltungsansicht sys.dm_db_index_usage_stats aus. Beispiele für Abfragen und Informationen zur Abfrage der dynamischen Verwaltungsansicht findest du unter sys.dm_db_index_usage_stats (Transact-SQL) auf der Microsoft-Website. Es hat sich bewährt, ungenutzte Indizes zu entfernen, um Speicherplatz zurückzugewinnen. Dies kann dir bei der Bewertung der Optimierungsprioritäten helfen.

Ablaufverfolgungsdateien

Ablaufverfolgungsdateien, einschließlich Ablaufverfolgungsdateien und Dump-Dateien der C2-Überwachung, können viel Speicherplatz beanspruchen. Amazon RDS löscht automatisch Ablaufverfolgungs- und Dump-Dateien, die älter als 7 Tage sind, aber du kannst die Aufbewahrungseinstellungen für deine Ablaufverfolgungsdateien anpassen.

Durch die Amazon-S3-Integration verbrauchter Speicherplatz

Wenn du deine DB-Instance in Amazon Simple Storage Service (Amazon S3) integriert hast, überprüfe, ob du Dateien auf dein Laufwerk D: hochgeladen hast. Um zu überprüfen, wie viel Speicherplatz deine S3-Integration verbraucht, verwende die gespeicherte Prozedur rds_gather_file_details und die Funktion rds_fn_list_file_details, um die Dateien auf deiner DB-Instance aufzulisten. Weitere Informationen findest du unter Listing files on the RDS DB instance (Auflisten von Dateien auf der RDS-DB-Instance).

CDC

Wenn du Change Data Capture (CDC) für eine Datenbank aktivierst, erhöhen häufige Änderungen an Quelltabellen oder Datenbanken die Größe der Protokolldatei. Der Speicherplatz könnte knapp werden. Wenn der Protokolldatenträger voll wird, kann CDC keine weiteren Transaktionen verarbeiten.

Überwachung

Wenn die Überwachung für eine DB-Instance nicht richtig konfiguriert ist, können die Protokolle exponentiell wachsen und sich auf den Speicher auswirken. Weitere Informationen findest du unter SQL Server Audit (SQL Server-Überwachung).

Der C2-Überwachungsmodus speichert eine große Menge an Ereignisinformationen in der Protokolldatei. Die Protokolldatei kann schnell wachsen und die Instance in den Zustand Storage Full (Speicher voll) versetzen. Weitere Informationen findest du unter Server configuration: c2 audit mode (c2-Überwachungsmodus (Serverkonfigurationsoption)) auf der Microsoft-Website.

Wenn du außerdem Funktionen wie den Abfragespeicher aktivierst, können diese Funktionen deine Ressourcenauslastung erhöhen.

Weitere Informationen

Amazon RDS für Microsoft SQL Server

Überwachen von Metriken in einer Amazon RDS-Instance

Amazon RDS-DB-Instance hat nur noch wenig Speicherplatz

Migration von Microsoft SQL Server-Datenbanken in die AWS-Cloud