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

Lesedauer: 6 Minute
0

Meine Amazon Relational Database Service (Amazon RDS) für eine Microsoft SQL Server-DB-Instance belegt mehr Speicherplatz als erwartet. Ich möchte meinen Festplattenspeicher optimieren.

Kurzbeschreibung

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, um sicherzustellen, dass dir nicht der Speicherplatz ausgeht.

Lösung

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

Amazon RDS für SQL Server-Instances im Status „Storage Full“ (Speicher voll)

Du kannst keine grundlegenden Operationen ausführen, wenn die Amazon RDS-Instance im Status 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 RDS für SQL Server-DB-Instances 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. 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 Instance zu migrieren. Stelle sicher, dass die neue Instance über bereitgestellte Eingabe/Ausgabe pro Sekunde (IOPS) verfügt oder den Allzweck (SSD)-Speichertyp hat. Oder verwende ein Datenmigrationstool, um auf die neue Instance zu migrieren. Weitere Informationen findest du unter Ändern einer Amazon RDS-DB-Instance.

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: Skalierungsspeicher und automatische Speicherskalierung werden in RDS für SQL Server-Instances, die Magnetspeicher verwenden, nicht unterstützt.

Bei Instances, bei denen die automatische Speicherskalierung aktiviert ist, kannst du den Speicher nur in bestimmten Szenarien erweitern. Weitere Informationen findest du unter Automatisches Verwalten der Kapazität mit der automatischen Speicherskalierung von Amazon RDS. Darüber hinaus kannst du den Speicher nur erweitern, wenn der maximale Speicherschwellenwert nicht der Speichererweiterung entspricht oder diese überschreitet. Weitere Informationen findest du unter Einschränkungen.

Speicherverbrauch bei RDS für SQL Server-Instances

Um Informationen über die Nutzung des physischen Speicherplatzes bei RDS für SQL Server-DB-Instances 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, die ROWS enthalten, bestehen aus Daten, und Dateien, die LOGS enthalten, stellen laufende Transaktionen dar.

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;

Bevor du den Speicher optimierst, stelle sicher, dass du verstehst, wie die SQL Server-Engine Speicher nutzt. Der Speicher der SQL Server-Engine wird allgemein anhand der folgenden Kategorien definiert:

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:

EXEC sp_spaceused;

Transaktionsprotokolldateien

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

DBCC SQLPERF(LOGSPACE)

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-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 löse ich Probleme, die auftreten, wenn den Amazon RDS-DB-Instances der Speicherplatz ausgeht?

Datenbankindizes

Wenn du einen großen Teil des verfügbaren Speichers für Indizes verwendest, kannst du möglicherweise durch Indexoptimierung Speicherplatz sparen. Um Informationen zur Indexnutzung abzurufen, führe die dynamische Verwaltungsansicht sys.dm_db_index_usage_stats dynamic aus. Dies kann dir bei der Bewertung der Optimierungsprioritäten helfen. Weitere Informationen findest du unter sys.dm_db_index_usage_stats (Transact-SQL) auf der Microsoft-Website.

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. Du kannst jedoch auch die Aufbewahrungseinstellungen für Ablaufverfolgungsdateien anpassen. Weitere Informationen findest du unter Festlegen des Aufbewahrungszeitraums für Ablaufverfolgungs- und Dump-Dateien.

Durch die Amazon S3-Integration verbrauchter Speicherplatz

Wenn du die RDS-DB-Instance in Amazon S3 integriert hast, hast du möglicherweise Dateien auf das Laufwerk D: hochgeladen, die Speicherplatz beanspruchen. Um zu überprüfen, wie viel Speicherplatz von der S3-Integration belegt wird, führe einen Befehl aus, um die Dateien auf der DB-Instance aufzulisten. Weitere Informationen findest du unter Auflisten von Dateien auf der RDS-DB-Instance.

CDC

Bei Datenbanken, in denen CDC aktiviert ist, erhöht sich die Größe der Protokolldatei auf der Grundlage der Häufigkeit der Änderungen an den Quelltabellen oder Datenbanken. Der Speicherplatz könnte irgendwann knapp werden. Wenn der Protokolldatenträger voll wird, kann CDC keine weiteren Transaktionen verarbeiten.

Überwachung

Wenn die Überwachung für eine Instance beispielsweise nicht richtig konfiguriert ist, können die Protokolle exponentiell wachsen und sich auf den Speicher auswirken. Weitere Informationen findest du unter 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 C2-Überwachungsmodus (Serverkonfigurationsoption) auf der Microsoft-Website.

Wenn du außerdem Features wie den Abfragespeicher aktivierst, kann sich dies auf die Ressourcenauslastung auswirken.

Ähnliche 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