DBAtlas · Atlas für Datenbankbetrieb

Platte / Tablespace voll

Du hast 'unable to extend', 'disk full', 'could not extend' oder 'log full' erhalten. Keine Panik: Finde zuerst heraus, WAS voll ist, gewinne sicher Platz zurück und behebe es dann dauerhaft.

Was ist voll?

An der falschen Stelle aufzuräumen hilft nicht. Miss zuerst die Belegung: Ist es eine Datendatei, das Transaktionslog, Archive/Redo, Temp oder die OS-Platte?

SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) AS pct_free
FROM (SELECT tablespace_name, SUM(bytes) alloc, SUM(GREATEST(bytes,maxbytes)) maxb FROM dba_data_files GROUP BY tablespace_name) d LEFT JOIN (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) f ON f.tablespace_name = d.tablespace_name ORDER BY pct_free;
  • Datendatei / Tablespace ist voll
  • Transaktionslog / Archive-Redo ist voll
  • Temp / Undo ist voll
  • OS-Platte ist voll (nicht die DB)

Was ist der größte Verbraucher?

Meist ist eine einzelne ausufernde Tabelle/ein Segment der Verursacher. Finde die größten.

SELECT segment_name, segment_type, ROUND(bytes/1048576,1) AS mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;
  • Es gibt eine unerwartet große/ausufernde Tabelle
  • Normales Wachstum, der Platz ist wirklich aufgebraucht
  • Zu viele tote Zeilen / Bloat

Warum wächst das Log?

Log/Archive lässt sich erst bereinigen, wenn die älteste aktive Transaktion/das älteste Backup abgeschlossen ist. Warum hat es sich angesammelt?

SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name=DB_NAME();  -- why can it not be truncated?
  • MSSQL: Es werden keine Log-Backups erstellt (LOG_BACKUP)
  • PG: Ein hängender Replication Slot hält WAL zurück
  • Oracle: Archivlog-Bereich (FRA) ist voll
  • Eine lange offene Transaktion hält das Log fest

Ursache: Ausufernde Tabelle/ausuferndes Segment

Ein einzelnes Objekt ist unerwartet gewachsen (unkontrollierte Inserts, eine nie bereinigte Queue-/Log-Tabelle).

Ursache: Echter Kapazitätsbedarf

Normales Wachstum; es muss Platz hinzugefügt werden.

Ursache: Bloat / tote Zeilen

Der Platz gelöschter/geänderter Zeilen wurde nicht zurückgewonnen.

Ursache: Temp / Undo voll

Ein großer Sort/Hash oder eine lange offene Transaktion hat den temporären Platz gefüllt.

Ursache: OS-Platte voll

Das Problem liegt auf der Betriebssystemplatte, nicht in der DB. Logs, Core Dumps, alte Backups oder Trace-Dateien können Platz belegen.

Ursache: Es werden keine Log-Backups erstellt (SQL Server)

Im Recovery Model FULL wächst das Log unbegrenzt, wenn keine Log-Backups erstellt werden.

Ursache: Verwaister Replication Slot (PG)

Ein hängender (inaktiver) Slot verhindert das Entfernen von WAL und bläht pg_wal auf.

Ursache: Archivlog-Bereich (FRA) voll (Oracle)

Archivlogs haben sich angesammelt und die FRA ist voll; bleibt der Archiver stehen, kann die Datenbank keine Schreibzugriffe mehr annehmen.

Ursache: Lange offene Transaktion

Die älteste aktive Transaktion verhindert, dass Log/Undo zurückgewonnen werden.

In DBAtlas öffnen →