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 SperreVACUUM FULL— schreibt die Tabelle neu; exklusive Sperre; gibt Speicherplatz an das Betriebssystem zurückVACUUM 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
- MVCC und Ursachen für Bloat
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE und pg_statistic
- Index-Only-Scans und Visibility Map