ANALYZE
und VACUUM
zur Wartung ausführen
In diesem Schritt lernen wir die Befehle ANALYZE
und VACUUM
in PostgreSQL kennen, die für die Aufrechterhaltung der Datenbankleistung unerlässlich sind.
ANALYZE
aktualisiert die Datenbankstatistiken, die vom Abfrageplaner (Query Planner) verwendet werden, um die effizientesten Ausführungspläne auszuwählen. Diese Statistiken beschreiben den Inhalt der Tabellen in der Datenbank. Ohne genaue Statistiken kann der Abfrageplaner schlechte Entscheidungen treffen, was zu einer langsamen Abfrageleistung führt.
VACUUM
gibt Speicherplatz frei, der von toten Tupeln (dead tuples) belegt wird. In PostgreSQL wird die alte Version einer Zeile nicht sofort entfernt, wenn eine Zeile aktualisiert oder gelöscht wird. Stattdessen wird sie als tot markiert. VACUUM
gibt den von diesen toten Tupeln belegten Speicherplatz frei und stellt ihn zur Wiederverwendung zur Verfügung. Es aktualisiert auch die Sichtbarkeitskarte (visibility map), die dem Abfrageplaner hilft, zu bestimmen, welche Zeilen für Transaktionen sichtbar sind.
Führen wir ANALYZE
für die Tabelle mytable
aus:
ANALYZE mytable;
Dieser Befehl analysiert die Tabelle mytable
und aktualisiert die Statistiken. Sie sehen keine Ausgabe, aber die Statistiken werden im Hintergrund aktualisiert.
Führen wir als Nächstes VACUUM
für die Tabelle mytable
aus:
VACUUM mytable;
Dieser Befehl gibt Speicherplatz frei, der von toten Tupeln in der Tabelle mytable
belegt wird. Auch hier sehen Sie keine Ausgabe, aber der Vacuum-Prozess wird im Hintergrund ausgeführt.
Für eine aggressivere Bereinigung können Sie VACUUM FULL
verwenden. VACUUM FULL
sperrt die Tabelle jedoch exklusiv und verhindert, dass während des Vacuum-Prozesses andere Operationen an der Tabelle durchgeführt werden. Es wird im Allgemeinen empfohlen, VACUUM
anstelle von VACUUM FULL
zu verwenden, es sei denn, Sie haben einen bestimmten Grund, VACUUM FULL
zu verwenden.
-- VACUUM FULL mytable; -- Uncomment this line to run VACUUM FULL (use with caution)
Schließlich können Sie ANALYZE
und VACUUM
zu einem einzigen Befehl kombinieren:
VACUUM ANALYZE mytable;
Dieser Befehl gibt zuerst Speicherplatz frei, der von toten Tupeln belegt wird, und aktualisiert dann die Statistiken. Dies ist oft der effizienteste Weg, um die Datenbankleistung aufrechtzuerhalten.