DBAtlas · Atlas für Datenbankbetrieb

Platte / Tablespace voll

Symptom

Fehler wie 'unable to extend', 'disk full', 'log file full'; Schreibvorgänge kommen zum Erliegen.

1. Keine Panik; finde zuerst heraus, was voll ist

Ist es eine Datafile, das Transaktionsprotokoll, der Archiv-/Redo-Bereich, Temp oder die OS-Platte? Am falschen Ort aufzuräumen hilft nicht. Prüfe die Platte auf OS-Ebene mit df -h und innerhalb der DB die Views zur Speicherbelegung.

2. Belegung messen

Welcher Tablespace bzw. welche Datei oder welches Verzeichnis ist voll, und zu wie viel Prozent?

Oracle

SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) 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;

PostgreSQL

SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database ORDER BY 2 DESC; -- use OS df for the disk

MySQL

SELECT table_schema, ROUND(SUM(data_length+index_length)/1048576,1) mb FROM information_schema.tables GROUP BY table_schema ORDER BY mb DESC;

SQL Server

SELECT name, size/128.0 size_mb, size/128.0 - CAST(FILEPROPERTY(name,'SpaceUsed') AS int)/128.0 free_mb FROM sys.database_files;

Redis

INFO memory  # used_memory vs maxmemory

3. Die größten Verbraucher finden

Ermittle die größten Tabellen/Segmente, die größten Log-/Archivdateien und nicht mehr benötigte alte Backups. Meist ist eine einzelne ausufernde Tabelle oder eine Ansammlung von Archivlogs schuld.

Oracle

SELECT segment_name, bytes/1048576 mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;

PostgreSQL

SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;

SQL Server

SELECT TOP 10 OBJECT_NAME(object_id), SUM(reserved_page_count)*8/1024 mb FROM sys.dm_db_partition_stats GROUP BY object_id ORDER BY mb DESC;

4. Platz sicher freigeben (schnell)

Für Logs/Archive: sichern und dann alte Archivlogs/Backups bereinigen (Oracle: RMAN delete archivelog; MSSQL: Log-Backup erstellen und das Log verkleinern). In Redis: maxmemory-policy und Eviction. Lösche NIE eine aktive Datafile manuell; lösche NIE Archivlogs ohne Backup.

5. Kapazität dauerhaft erhöhen

Erweitere die Datafile oder aktiviere Autoextend (Oracle: ALTER DATABASE DATAFILE ... AUTOEXTEND ON MAXSIZE), vergrößere die Platte, füge einen Tablespace hinzu. Behebe die Ursache: Log-Rotation, Job zur Archivbereinigung, Aufbewahrungsrichtlinie.

6. Wiederholung verhindern

Richte Alarme für die Plattenbelegung ein (Schwellen 80 %/90 %), automatisiere die Archiv-/Log-Bereinigung und lege die Aufbewahrungsrichtlinie klar fest. So musst du dieses Playbook nicht erneut öffnen.

In DBAtlas öffnen →