Direkt zum Inhalt

Warum verwendet meine Amazon RDS für MySQL DB-Instance mehr Speicher als ich erwartet habe?

Lesedauer: 4 Minute
0

Ich möchte wissen, warum meine Amazon Relational Database Service (Amazon RDS) für MySQL-DB-Instance mehr Speicherplatz benötigt als ich erwartet habe. Ich möchte auch den Festplattenspeicher optimieren.

Lösung

Um den verfügbaren Speicherplatz für eine Amazon RDS-DB-Instance zu überwachen, kannst du die Amazon CloudWatch FreeStorageSpace-Metrik verwenden. Die FreeStorageSpace-Metrik zeigt jedoch nicht an, was Speicherplatz in der DB-Instance verwendet. Verwende die folgenden Methoden, um festzustellen, was den Speicherplatz verwendet und Speicherplatz zurückzugewinnen.

Führe OPTIMIZE TABLE aus

Tabellen verwenden nur Speicherplatz, der nicht aktiv genutzt wird. Amazon RDS weist den Tabellen jedoch weiterhin Speicherplatz zu. Wenn du innodb_file_per_table aktivierst, kannst du den Befehl OPTIMIZE TABLE ausführen, um den Speicherplatz zurückzugewinnen. Weitere Informationen findest du unter Anweisung OPTIMIZE TABLE auf der MySQL-Website.

Du kannst OPTIMIZE TABLE für InnoDB-, MyISAM- und ARCHIVE-Tabellen verwenden. TABELLE OPTIMIEREN funktioniert, wenn du die Tabelle gemäß der Amazon RDS-Standardkonfigurationseinstellung innodb_file_per_table in einem separaten Tablespace erstellst. Weitere Informationen findest du unter File-per-Table-Tablespaces auf der MySQL-Website.

 Amazon RDS akzeptiert den Befehl OPTIMIZE TABLE, führt aber stattdessen den Befehl ALTER TABLE...FORCE aus. In diesem Fall erhältst du eine Warnmeldung, die der folgenden ähnelt:

„Die Tabelle unterstützt die Optimierung nicht, sondern führt stattdessen neu erstellen + analysieren.“

Aktualisiere die Statistiken und führe dann die folgende Abfrage information\ _schema.tables aus, um die Speicherauslastung auf der Grundlage der Statistiken abzuschätzen:

SELECT    table_name,
    data_length,
    max_data_length,
    index_length,
    data_free
FROM
    information_schema.tables
WHERE table_schema='schema_name'
;

Hinweis: Füge in der vorherigen Abfrage die Werte für den Anwendungsfall hinzu. 

Die Spalte data_free zeigt die Menge an freiem Speicherplatz, die einer Tabelle zugewiesen ist, die nicht aktiv genutzt wird.

Reduziere den Speicherplatz in Anwendungstabellen

Um zu sehen, wie viel Speicherplatz die Anwendungstabellen auf der RDS MySQL-DB-Instance verwenden, führe die folgende Abfrage aus:

SELECT TABLESPACE_NAME,
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,
 FREE_EXTENTS FREE_EXTENTS_MB, TOTAL_EXTENTS
TOTAL_EXTENTS_MB FROM
INFORMATION_SCHEMA.FILES;

Führe die folgende Abfrage aus, um die größte Anwendungstabelle auf der RDS MySQL-DB-Instance zu finden:

SELECT TABLESPACE_NAME,  
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,  
FREE_EXTENTS FREE_EXTENTS_MB,
TOTAL_EXTENTS  TOTAL_EXTENTS_MB FROM  
INFORMATION_SCHEMA.FILES
ORDER BY TOTAL_EXTENTS_MB DESC;

Hinweis: Wenn eine Datenbank Tabellen mit Spalten variabler Länge enthält, die länger als 768 Byte sind, kannst du den einzelnen Speicherplatz, den die Datenbank und die Tabelle verwenden, nicht berechnen. Diese Einschränkung umfasst die Befehle BLOB, TEXT, VARCHAR und VARBINARY.

Speicher für binäre Protokolle reduzieren

Wenn du einer Amazon RDS-Instance eine Lesereplikate hinzufügst, belegt das binäre Protokoll der Quell-Instance zusätzlichen Speicherplatz. Um zu bestimmen, wie viel Speicherplatz das binäre Protokoll auf der Quell-Instance verwendet, überprüfe die CloudWatch-Metrik BinLogDiskUsage. Wenn das binäre Protokoll zunehmend Speicherplatz beansprucht, musst du möglicherweise die Lesereplikate synchronisieren.

Reduziere oder deaktiviere die Speicherung von allgemeinen Protokollen und langsamen Abfrageprotokollen

Wenn du die Protokollparameter General und Slow Query deaktivierst, beginnt die Instance, die Protokolle und Back-ups der Protokolle zu speichern. Informationen zur Rotation der Dateien und zur Steuerung der Festplattennutzung findest du unter mysql.rds_rotate_general_log und mysql.rds_rotate_slow_log.

Hinweis: Wenn du keine Problembehandlung durchführst, empfiehlt es sich, die allgemeinen und langsamen Abfrageprotokolle zu deaktivieren.

Verwaltung oder Reduzierung der Tablespace-Größe des InnoDB-Systems

Der System-Tablespace beginnt mit 10 MB Speicherplatz und enthält das InnoDB-Datenwörterbuch und Undo-Speicherplatz. Nachdem du den Speicherplatz zugewiesen hast, ist die Datei mindestens 10 MB groß und kann mehr verfügbaren Speicherplatz verwenden.

Standardmäßig setzt Amazon RDS innodb_file_per_table auf 1, sodass die Datenbank Daten für jeden Tablespace in einer eigenen.ibd-Datei speichert. Um wiederverwendbaren Speicherplatz für verwandte Tabellen wiederherzustellen, verwende OPTIMIZE TABLE, um die Größe jeder Tabellen-Tablespace-Datei zu ändern. Oder du kannst eine Tabelle wegassen.

Wenn du innodb_file_per_table auf 0 setzt, weist Amazon RDS alle Tabellen dem System-Tablespace zu. Wenn du Tabellen oder Indizes löschst oder Daten aus zugewiesenen Tabellen im System löschst oder kürzt, markiert der Tablespace den Speicherplatz als wiederverwendbar. innodb_file_per_table gibt jedoch nicht den Speicherplatz für das Dateisystem frei.

Du kannst den System-Tablespace in der Instannce, in der er sich befindet, nicht verkleinern. Exportiere stattdessen die Daten der aktuellen Datenbank und importiere die Daten dann in eine neue Instance. Um Ausfallzeiten zu reduzieren, konfiguriere die neue MySQL-Instance als Replikat der Amazon RDS-Quell-Instance. Nachdem du das Replikat mit der Amazon RDS-Quell-Instance synchronisiert, wechsle zur neuen Instance.

Hinweis: Wenn du aus einem Snapshot wiederherstellst oder ein Lesereplikat erstellst, stelle keinen Speicherplatz aus dem System-Tablespace wieder her. Beide Methoden verwenden einen Snapshot des Speichervolumes der Quell-Instance, das den System-Tablespace enthält.

Ähnliche Informationen

Amazon RDS-DB-Instance hat nur noch wenig Speicherplatz

Ändern einer Amazon RDS-DB-Instance

Wie kann ich den Fehler „MySQL HA_ERR_RECORD_FILE_FULL“ beheben, wenn ich Amazon RDS für MySQL verwende?