0Pricing
SQL Academy · Lektion

VACUUM, autovacuum, vacuum_cost_delay

Optimieren Sie Schwellenwerte für autovacuum, vacuum_cost_delay und paralleles VACUUM für große Tabellen.

VACUUM, autovacuum, vacuum_cost_delay ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Drei VACUUM-Modi

  • VACUUM (lazy) — gibt tote Zeilen frei, aktualisiert die Free-Space-Map und benötigt keine exklusive Sperre
  • VACUUM FULL — schreibt die Tabelle neu; exklusive Sperre; gibt Speicherplatz an das Betriebssystem zurück
  • VACUUM ANALYZE — führt VACUUM aus und aktualisiert gleichzeitig die Statistiken des Planers

VACUUM manuell ausführen

Auch bei aktiviertem Autovacuum manchmal nützlich:

VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders;       -- parallel index cleanup (PG 13+)

Autovacuum-Prozess

Ein Hintergrundprozess startet Worker, die Tabellen bereinigen, sobald diese Schwellenwerte überschreiten. Standardmäßig kümmern sich einige wenige Worker um den gesamten Cluster.

Optimierung pro Tabelle

Stark ausgelastete Tabellen profitieren von aggressivem Autovacuum:

ALTER TABLE busy_table SET (
  autovacuum_vacuum_scale_factor = 0.05,    -- 5% dead vs default 20%
  autovacuum_vacuum_threshold    = 1000,
  autovacuum_analyze_scale_factor = 0.05
);

vacuum_cost_delay

Begrenzt die E/A-Aktivität von VACUUM, damit Abfragen im Vordergrund nicht beeinträchtigt werden. Der Standardwert ab PG 12 beträgt 2 ms und ist normalerweise ausreichend. Bei SSDs können Sie den Wert senken:

autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.

Paralleles VACUUM

Seit PG 13 führt VACUUM die Indexbereinigung parallel aus:

VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).

VACUUM FULL: Wann und warum

Schreibt die Tabelle vollständig neu und gibt Speicherplatz an das Betriebssystem zurück. Erfordert ACCESS EXCLUSIVE. Verwenden Sie es nur als letzte Möglichkeit oder stattdessen pg_repack.

VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.

pg_repack: Online-Alternative

Schreibt eine Tabelle online neu, ohne eine vollständige Sperre. Hat denselben Effekt wie VACUUM FULL, ist aber für den Produktionseinsatz geeignet:

pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.

Autovacuum überwachen

Zeigen Sie die Zeitpunkte der letzten Vakuum- und Analyze-Läufe sowie die Anzahl toter Tupel an:

SELECT relname,
       n_live_tup, n_dead_tup,
       last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

Wenn Autovacuum nicht Schritt hält

Symptome:

  • Bloat nimmt zu
  • n_dead_tup in pg_stat_user_tables ist hoch
  • Abfragepläne werden schlechter

Maßnahmen: Erhöhen Sie autovacuum_max_workers, senken Sie den Scale-Faktor pro Tabelle und beheben Sie lange Transaktionen, die VACUUM blockieren.

VACUUM-Protokollierung

Protokollieren Sie für die Optimierung langsame VACUUM-Läufe:

log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.

FREEZE

VACUUM „friert“ alte Tupel gelegentlich ein, um einen XID-Wraparound zu verhindern. Aggressives Autovacuum hält das Alter der einzufrierenden Tupel niedrig und verhindert Notfallereignisse durch einen Wraparound.

Zusammenfassung

Autovacuum ist unverzichtbar; stimmen Sie es auf die jeweilige Arbeitslast ab.

  • Autovacuum-Einstellungen pro Tabelle für stark ausgelastete Tabellen
  • VACUUM FULL ist die letzte Möglichkeit — bevorzugen Sie pg_repack
  • Überwachen Sie n_dead_tup und last_autovacuum
  • Beheben Sie lange Transaktionen, die die Bereinigung blockieren

Kurzer Check

Wie lässt sich Speicherplatz auf einer stark ausgelasteten Produktionstabelle am sichersten zurückgewinnen, ohne eine lange blockierende Sperre zu verursachen?

Häufig gestellte Fragen

Ist die Lektion „VACUUM, autovacuum, vacuum_cost_delay“ kostenlos?

Ja — der vollständige Text von „VACUUM, autovacuum, vacuum_cost_delay“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „VACUUM, autovacuum, vacuum_cost_delay“?

Optimieren Sie Schwellenwerte für autovacuum, vacuum_cost_delay und paralleles VACUUM für große Tabellen. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „VACUUM, autovacuum, vacuum_cost_delay“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. MVCC und Ursachen für Bloat
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE und pg_statistic
  4. Index-Only-Scans und Visibility Map
← Zurück zu SQL Academy