Wie verwalte ich den Speicher in meiner Amazon RDS für Oracle DB-Instance?
Ich möchte bewährte Methoden anwenden, um den Speicher meiner Amazon Relational Database Service (Amazon RDS) für Oracle-Datenbank (DB)-Instance zu verwalten.
Kurzbeschreibung
Wenn deine RDS-DB-Instance den Status storage-full (Speicher voll) erreicht, friert die Anmeldung deiner Instance ein, das Datenbankwachstum stoppt und du erhältst die folgende Fehlermeldung:
„ORA-27061: waiting for async I/Os failed
Error: Linux-x86_64 Error: 28: No space left on device.“
Um deinen freien Speicher so zu verwalten, dass er den Status storage-full nicht erreicht, verwende die folgenden bewährten Methoden.
Lösung
Die Metrik FreeStorageSpace überwachen
Wenn die Metrik FreeStorageSpace schnell sinkt und deine DB-Instance mehr als 90 % ihres zugewiesenen Speichers nutzt, kommt es in der Datenbank zu Ereignissen mit geringem Speicherplatz. Die RDS-Ereignis-IDs für geringen Speicherplatz lauten RDS-EVENT-0007 und RDS-EVENT-0089.
Um die Metrik FreeStorageSpace zu überwachen und benachrichtigt zu werden, wenn der Speicherplatz sein Kontingent erreicht, erstelle Amazon CloudWatch-Alarme. Weitere Informationen findest du unter Monitoring metrics in an Amazon RDS instance (Überwachung von Metriken in einer Amazon RDS-Instance).
Um dieses Problem zu verhindern, kannst du Auto Scaling aktivieren, um automatisch Speicherplatz hinzuzufügen.
Überprüfe alle Autoextend-Tablespaces
Der standardmäßige Tablespace-Typ für RDS für Oracle-DB-Instances ist bigfile mit aktiviertem AUTOEXTEND. Die maximale Größe von bigfile-Tablespaces beträgt 16 TiB. Der Tablespace wird entweder auf das maximale Kontingent für den Tablespace oder auf den zugewiesenen Speicher für deine DB-Instance erhöht. Wenn dein zugewiesener Speicher voll ist, wechselt deine Instance zu storage-full und deine Tablespaces können nicht erweitert werden. Weitere Informationen findest du unter Autoextend Tablespace auf der Oracle-Website.
Es hat sich bewährt, eine Tablespace-Erweiterung basierend auf den Anforderungen deiner Anwendung zu planen. Um storage-full-Probleme vor einem Massenladevorgang zu vermeiden, ändere die Größe von Tablespaces oder weise mehr Speicherplatz zu. Wenn du deinen Speicher skalierst, wird die Leistung der DB-Instance normalerweise nicht beeinträchtigt und es treten keine Ausfälle auf. Nachdem du die Speichergröße geändert hast, befindet sich deine DB-Instance im Zustand der Speicheroptimierung.
Hinweis: Bevor du deine DB-Instance änderst, siehe Working with storage for Amazon RDS DB instances (Arbeiten mit Speicher für Amazon RDS-DB-Instances).
Überprüfe die Oracle-Dateigrößenkontingente für Amazon RDS
Die maximale Größe einer einzelnen Datei in deinen RDS für Oracle-DB-Instances beträgt 16 TiB.
Wenn du die Größe einer Datendatei in einem bigfile-Tablespace über dieses Kontingent hinaus änderst, erhältst du eine Fehlermeldung, die der folgenden ähnelt:
„ORA-01237: cannot extend datafile 6
ORA-01110: data file 6: '/rdsdbdata/db/mydir/datafile/myfile.dbf'ORA-27059:
could not reduce file sizeLinux-x86_64 Error: 27:
File too largeAdditional information: 2“
Den Fehler „Storage quota exceeded“ beheben
Wenn du dein Speicherkontingent erreichst und versuchst, eine neue RDS-DB-Instance zu erstellen, erhältst du eine Fehlermeldung, die der folgenden ähnelt:
<x><x>„Storage quota exceeded by ; requested size: “
Um dieses Problem zu beheben, beantrage eine Kontingenterhöhung. Oder lösche ungenutzte Backups, um sofort Speicherplatz in deinem AWS-Konto freizugeben.
Verwalte große Trace-Dateien, die das BDUMP-Verzeichnis belegen
Deine Datenbank erstellt gelegentlich große Trace-Dateien im Verzeichnis BDUMP. Trace-Dateien belegen Speicherplatz und tragen zum Auftreten von storage-full auf deinen DB-Instances bei. Standardmäßig löscht Amazon RDS Trace-Dateien und Protokolldateien, die älter als 7 Tage sind.
Um deine aktuelle Aufbewahrungsfrist für Trace-Dateien anzuzeigen, führe den folgenden Befehl aus:
EXEC rdsadmin.rdsadmin_util.show_configuration;
Um eine neue Aufbewahrungsfrist für Trace-Dateien festzulegen, führe den folgenden Befehl aus:
EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440); commit;
Hinweis: Ersetze 1440 durch die Anzahl der Minuten, für die du deine Trace-Dateien aufbewahren möchtest. Weitere Informationen zur Verwaltung deiner Trace-Dateien findest du unter RDS for Oracle database log files (Protokolldateien der RDS für Oracle-Datenbank).
Führe die folgenden Schritte aus, um große Trace-Dateien zu sortieren und zu entfernen:
-
Um die Dateien im Verzeichnis BDUMP nach Größe zu sortieren, führe einen Befehl aus, der dem folgenden ähnelt:
select FILENAME, FILESIZE/1024/1024/1024"GB",MTIME from TABLE (rdsadmin.rds_file_util.listdir(p_directory => 'BDUMP')) order by 3 desc -
Identifiziere die Dateien, die du nicht verwendest.
-
Führe das folgende fremove dbms-Paket aus, um große Dateien in der Trace-Datei-Aufbewahrung zu löschen:
exec UTL_FILE.FREMOVE ('BDUMP',' <TRACEFILENAME');Hinweis: Ersetze TRACEFILENAME durch den Namen der Trace-Datei, die du nicht verwendest.
Verwalte große Data Pump-Verzeichnisse, die das Verzeichnis DATA_PUMP_DIR verwenden
Wenn du Oracle Data Pump zum Verschieben deiner Daten verwendest, kopierst du möglicherweise große Dumpfiles, die deinen freien Speicherplatz verringern. Um dieses Problem zu beheben, integriere RDS für Oracle mit Amazon Elastic File System (Amazon EFS), sodass du DATA_PUMP_DIR nicht für Datenbankaktualisierungen verwenden musst.
Überprüfe deine Aufbewahrung von Archivprotokollen
Amazon RDS sichert Archivprotokolle in einem internen Speicher basierend auf der Backup-Aufbewahrung für Zwecke der Point-in-Time-Recovery (PITR). Basierend auf den Aufbewahrungseinstellungen für Archivprotokolle für RDS für Oracle tragen Archivprotokolle, die du lokal im RDS-Speicher speicherst, zur zugewiesenen Speichernutzung bei.
Um archivierte Redo-Protokolle aufzubewahren, führe rdsadmin.rdsadmon_util.set_configuration mit den folgenden Parametern aus:
begin rdsadmin.rdsadmin_util.set_configuration( name => 'archivelog retention hours', value => '24'); end; / commit;
Hinweis: Ersetze 24 durch die Anzahl der Stunden, für die du archivierte Redo-Protokolle aufbewahren möchtest.
Um zu überprüfen, wie viel Speicherplatz deine DB-Instance während eines bestimmten Zeitraums verwendet hat, führe die folgende Abfrage aus:
SELECT SUM(BLOCKS * BLOCK_SIZE) bytes FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= SYSDATE-(hours/24) AND DEST_ID=1;
Hinweis: Ersetze hours durch die Anzahl der Stunden, die du abfragen möchtest.
Um aufbewahrte Archivprotokolle anzuzeigen, führe die folgenden Befehle aus, um ein Verzeichnisobjekt als ARCHIVELOG_DIR: zu erstellen.
EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));
Überprüfe deine Datenbank auf fragmentierte Objekte
Fragmentierung führt dazu, dass die Datenbank langsamer wird und eine unnötige Menge an Speicherplatz verbraucht. Um die fragmentierten Objekte zu identifizieren, die den meisten Speicherplatz belegen, führe einen Befehl aus, der dem folgenden ähnelt:
SELECT owner, table_name, ROUND((blocks * 8 / 1024), 2) "size (mb)", ROUND((num_rows * avg_row_len / 1024 / 1024), 2) "actual_data (mb)", ROUND((blocks * 8 / 1024) - (num_rows * avg_row_len / 1024 / 1024), 2) "wasted_space (mb)" FROM dba_tables WHERE owner = UPPER('&schema_name') AND blocks > 0 AND (blocks * 8 / 1024) > (num_rows * avg_row_len / 1024 / 1024) ORDER BY 5 DESC;
Um die Fragmentierung zu beheben, verwende Export und Import, erstelle Tabellen neu oder verschiebe Tabellen in einen neuen Tablespace.
Hinweis: Nachdem du fragmentierte Objekte geleert und in einen neuen Tablespace verschoben und den fragmentierten Tablespace gelöscht hast, wird die Metrik für den freien Speicherplatz aktualisiert.
Verwende AWR Explorer, um Wachstumstrends auf deiner DB-Instance zu analysieren
Mit der Oracle Enterprise Edition kannst du AWR Explorer verwenden, um deine historischen Informationen abzufragen und die Wachstumstrends deiner Datenbank zu analysieren. Um das Wachstum deines Datenbankschemas für jeden Objekttyp über eine bestimmte Anzahl von Tagen zu überprüfen, führe den folgenden Befehl aus:
title "Total Disk Used by Object Type" select c.segment_type, sum(space_used_delta) / 1024 / 1024 "Space used (M)", sum(c.bytes) / 1024 / 1024 "Total Space (M)", round(sum(space_used_delta) / sum(c.bytes) * 100, 2) || '%' "Percent of Total Disk Usage" from dba_hist_snapshot sn, dba_hist_seg_stat a, dba_objects b, dba_segments c where end_interval_time > trunc(sysdate) - &days_back and sn.snap_id = a.snap_id and b.object_id = a.obj# and b.owner = c.owner and b.object_name = c.segment_name and space_used_delta > 0 and c.owner = '&schema_name' group by rollup(segment_type);
Zugehörige Artikel
Wie reduziere ich die Speichergröße und die Kosten meiner Amazon-RDS-Datenbank-Instance?
Warum verwendet meine Amazon RDS für Oracle DB-Instance mehr Speicher als ich erwartet habe?
Amazon RDS DB instance running out of storage (Amazon RDS-DB-Instance hat nur noch wenig Speicherplatz)
- Themen
- Database
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor einem Jahr