DBAtlas · Atlas für Datenbankbetrieb

Freien Platz zurückgewinnen (shrink / vacuum / compact)

Oracle

ALTER TABLE customer ENABLE ROW MOVEMENT;
ALTER TABLE customer SHRINK SPACE;

SHRINK senkt die High Water Mark (HWM). Um auch Indizes zu verkleinern, SHRINK SPACE CASCADE verwenden.

PostgreSQL

-- Online, light locking (does not return space to the OS):
VACUUM (VERBOSE, ANALYZE) customer;
-- Return space to the OS (locks the table!):
-- VACUUM FULL customer;

VACUUM FULL setzt einen AccessExclusiveLock und schreibt die Tabelle neu; nicht zu Spitzenzeiten ausführen. Alternative: pg_repack.

MySQL

OPTIMIZE TABLE customer;

Baut bei InnoDB die Tabelle neu auf und gibt den data_free-Platz zurück; dauert bei großen Tabellen lange.

SQL Server

-- Generally NOT RECOMMENDED (causes fragmentation). If really needed:
DBCC SHRINKFILE (N'MyDB_data', 1024);  -- target 1024 MB

Das Verkleinern einer Datendatei verursacht Indexfragmentierung; danach die Indizes mit REBUILD neu aufbauen. Beim Log zuerst ein Backup erstellen.

MongoDB

db.runCommand({ compact: "customer" })

Versucht bei WiredTiger, freien Platz an das Betriebssystem zurückzugeben (nicht immer möglich). Ab 4.4 blockiert es keine Lese-/Schreibzugriffe, nur bestimmte DDL-Operationen auf derselben Collection; da es hohe IO-Last erzeugt, ist die Ausführung auf einem Secondary und in einem Wartungsfenster sicherer.

Redis

MEMORY PURGE
# Tries to return jemalloc fragmentation to the OS

Die Einstellung activedefrag yes defragmentiert online und automatisch; MEMORY DOCTOR liefert Empfehlungen.

In DBAtlas öffnen →