VACUUM

Name

VACUUM -- säubert und analysiert wahlweise eine Datenbank

Synopsis

VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ tabelle ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ tabelle [ (spalte [, ...] ) ] ]

Beschreibung

VACUUM gibt den von gelöschten Zeilenversionen in einer Tabelle belegten Speicherplatz frei. PostgreSQL entfernt gelöschte oder durch Aktualisierung hinfällig gewordene Zeilenversionen nicht sofort physikalisch aus der Tabelle; sie müssen durch VACUUM entfernt werden. Deshalb ist es notwendig, regelmäßig VACUUM auszuführen, besonders in Tabellen, die oft aktualisiert werden.

Ohne Parameter bearbeitet VACUUM jede Tabelle in der aktuellen Datenbank. Mit Parameter wird nur die angegebene Tabelle bearbeitet.

VACUUM ANALYZE führt für jede angegebene Tabelle zuerst VACUUM und dann ANALYZE aus. Diese Kombination ist für Wartungsskripte praktisch. Weitere Informationen finden Sie auch unter ANALYZE.

Ein einfaches VACUUM (ohne FULL) gibt einfach Platz zur Wiederverwendung frei. Diese Form des Befehls kann gleichzeitig mit anderen Lese- und Schreibvorgängen in der Tabelle laufen, da keine exklusive Sperre gesetzt wird. VACUUM FULL ist weitreichender. Unter anderem werden Zeilen zwischen Blöcken verschoben um die Tabelle auf die geringstmögliche Anzahl von Diskblöcken zu verkleinern. Diese Form ist wesentlich langsamer und benötigt eine exklusive Sperre für jede bearbeitete Tabelle.

Die Option FREEZE sorgt dafür, dass Zeilenversionen so bald wie möglich als „eingefroren“ markiert werden, anstatt zu warten, bis sie ziemlich alt geworden sind. Wenn das gemacht wird, wenn es in der selben Datenbank keine offenen Transaktionen gibt, dann ist garantiert, dass in der Datenbank alle Zeilenversionen „eingefroren“ sind und keine Probleme mit Transaktionsnummernüberlauf haben werden, egal wie lange in der Datenbank kein VACUUM ausgeführt wird. FREEZE ist nicht für die regelmäßige Verwendung gedacht, sondern nur für die Vorbereitung einer benutzerdefinierten Templatedatenbank oder anderer Datenbanken, die ausschließlich gelesen werden und nicht regelmäßig mit VACUUM aufgeräumt werden. Einzelheiten dazu finden Sie in Kapitel 21.

Parameter

FULL

Wählt das „volle“ VACUUM, das mehr Platz wiedergewinnt, aber länger braucht und die Tabelle exklusiv sperrt.

FREEZE

Wählt aggressives „Einfrieren“ von Zeilen.

VERBOSE

Gibt für jede Tabelle einen detaillierten Bericht über die Aktivität aus.

ANALYZE

Aktualisiere die Statistiken, die vom Planer verwendet werden um den besten Ausführungsplan für eine Anfrage zu ermitteln.

tabelle

Der Name einer Tabelle (möglicherweise mit Schemaqualifikation), die bearbeitet werden soll. Wenn keine Tabelle angegeben ist, dann werden alle Tabellen in der Datenbank bearbeitet.

spalte

Der Name einer bestimmten Spalte, die analysiert werden soll. Wenn keine Spalten angegeben sind, dann werden alle Spalten analysiert.

Meldungen

VACUUM

Der Befehl ist fertig.

INFO: --Relation tabelle--

Der Anfang eines Berichts über tabelle.

INFO: Pages 98: Changed 25, Reapped 74, Empty 0, New 0; Tup 1000: Vac 3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188; Re-using: Free/Avail. Space 586952/586952; EndEmpty/Avail. Pages 0/74. Elapsed 0/0 sec.

Der Analysebericht für tabelle.

INFO: Index index: Pages 28; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.

Der Analysebericht über einen Index der Tabelle.

Hinweise

Wir empfehlen, dass VACUUM in aktiven Produktionsdatenbanken regelmäßig ausgeführt wird (mindestens jede Nacht), damit gelöschte Zeilen entfernt werden. Außerdem sollte VACUUM ANALYZE ausgeführt werden, wenn eine große Zahl von Zeilen eingefügt oder gelöscht worden ist. Damit werden die Statistiken mit den Ergebnissen aller Änderungen aktualisiert, wodurch der Anfrageplaner beim Planen von Anfragen bessere Entscheidungen treffen kann.

Die Option FULL ist nicht für die regelmäßige Verwendung gedacht, kann aber in besonderen Fällen nützlich sein. Ein Beispiel ist, wenn Sie die meisten Zeilen aus einer Tabelle gelöscht haben und die Tabelle physikalisch verkleinern wollen um den Speicherplatzverbrauch zu verringern. VACUUM FULL kann eine Tabelle in der Regel besser verkleinern als ein einfaches VACUUM.

Beispiele

So sieht es aus, wenn VACUUM mit einer Tabelle aus der Regressionsdatenbank ausgeführt wird:

=> VACUUM VERBOSE ANALYZE onek;
INFO:  --Relation onek--
INFO:  Index onek_unique1: Pages 14; Tuples 1000: Deleted 3000.
        CPU 0.00s/0.11u sec elapsed 0.12 sec.
INFO:  Index onek_unique2: Pages 16; Tuples 1000: Deleted 3000.
        CPU 0.00s/0.10u sec elapsed 0.10 sec.
INFO:  Index onek_hundred: Pages 13; Tuples 1000: Deleted 3000.
        CPU 0.00s/0.10u sec elapsed 0.10 sec.
INFO:  Index onek_stringu1: Pages 31; Tuples 1000: Deleted 3000.
        CPU 0.01s/0.09u sec elapsed 0.10 sec.
INFO:  Removed 3000 tuples in 70 pages.
        CPU 0.02s/0.04u sec elapsed 0.07 sec.
INFO:  Pages 94: Changed 0, Empty 0; Tup 1000: Vac 3000, Keep 0, UnUsed 0.
        Total CPU 0.05s/0.45u sec elapsed 0.59 sec.
INFO:  Analyzing onek
VACUUM

Kompatibilität

Der Befehl VACUUM ist eine PostgreSQL-Erweiterung.