Warum verwendet meine Amazon RDS für MySQL DB-Instance mehr Speicher als ich erwartet habe?
Meine Amazon Relational Database Service (Amazon RDS) für MySQL Datenbank (DB)-Instance benötigt mehr Speicherplatz als ich erwartet habe. Ich möchte verstehen, warum, und ich möchte den Festplattenspeicher optimieren.
Kurzbeschreibung
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 nicht an, was Speicherplatz in der DB-Instance verwendet. Verwende die folgenden Methoden, um festzustellen, was den Speicherplatz verwendet und um Speicherplatz zurückzugewinnen.
Lösung
Führe OPTIMIZE TABLE aus
RDS für MySQL weist Tabellen, die nicht aktiv verwendet werden, Speicherplatz zu. Wenn du Zeilen löschst, hinterlässt InnoDB leere Seiten, die wiederverwendet werden können. InnoDB verkleinert die physische Tabellendatei nicht. Wenn du innodb_file_per_table aktiviert hast, führe den Befehl OPTIMIZE TABLE aus, 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. OPTIMIZE TABLE funktioniert, wenn du die Tabelle auf der Grundlage 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 aus.“
Der Befehl ALTER TABLE...FORCE aktualisiert auch deine Tabellenstatistiken. Führe die folgende Abfrage aus, um den Speicherverbrauch auf der Grundlage der aktualisierten Tabellenstatistiken abzuschätzen:
SELECT table_name, data_length, max_data_length, index_length, data_free FROM information_schema.tables WHERE table_schema='schema_name' ;
Hinweis: Ersetze schema_name durch den Namen deines Datenbankschemas.
Um den freien Speicherplatz zu ermitteln, der einer Tabelle zugewiesen ist, die nicht aktiv genutzt wird, sieh dir die Spalte data_free an.
Reduziere den Speicherplatz in Anwendungstabellen
Führe die folgende Abfrage aus,um zu sehen, wie viel Speicherplatz die Anwendungstabellen auf der RDS für MySQL DB-Instance verwenden:
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 für 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 Datentypen BLOB, TEXT, VARCHAR und VARBINARY.
Speicher für binäre Protokolle reduzieren
Wenn du einer RDS für MySQL DB-Instance ein Lesereplikat hinzufügst, belegt das binäre Protokoll der Quell-Instance zusätzlichen Speicherplatz. Um zu bestimmen, wie viel Speicherplatz das binäre Protokoll verwendet, sieht dir die BinLogDiskUsage-CloudWatch-Metrik an. Wenn das binäre Protokoll zunehmend Speicherplatz beansprucht, synchronisiere deine Lesereplikate.
Reduziere oder deaktiviere die Speicherung von allgemeinen Protokollen und langsamen Abfrageprotokollen
Wenn du die Parameter für allgemeine Protokolle und langsame Abfrageprotokolle deaktivierst, speichert deine Instance die Protokolle und die Backups der Protokolle. Es empfiehlt sich, die allgemeinen und langsamen Abfrageprotokolle zu deaktivieren, wenn du keine Problembehandlung durchführst. Informationen zur Rotation der Dateien und zur Steuerung der Festplattennutzung findest du unter mysql.rds_rotate_general_log und mysql.rds_rotate_slow_log.
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 lösche eine Tabelle.
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.
Um den System-Tablespace zu verkleinern, exportiere die Daten aus deiner aktuellen Datenbank und importiere die Daten dann in eine neue Instance. Du kannst den System-Tablespace in der Instance, in der er sich befindet, nicht verkleinern. Um Ausfallzeiten zu reduzieren, konfiguriere die neue RDS-für-MySQL-Instance als Replikat der Quell-Instance. Nachdem du das Replikat mit der RDS-Quell-Instance synchronisiert hast, 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
- Themen
- Database
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 5 Jahren