SQL Academy · Lektion

VACUUM, autovacuum, vacuum_cost_delay

Finjustér autovacuum-tærskler, vacuum_cost_delay og parallel VACUUM til store tabeller.

Lektion 2 af 414 trin

VACUUM, autovacuum, vacuum_cost_delay er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Tre VACUUM-tilstande

  • VACUUM (doven) — frigiver døde rækker, opdaterer kortet over ledig plads og bruger ingen eksklusiv lås
  • VACUUM FULL — omskriver tabellen, bruger en eksklusiv lås og frigiver diskplads tilbage til operativsystemet
  • VACUUM ANALYZE — udfører VACUUM og opdaterer planlæggerens statistikker i én operation

Kørsel af VACUUM manuelt

Det kan nogle gange være nyttigt, selv når autovacuum er aktiveret:

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

Autovacuum-processen

En baggrundsproces starter workers, som udfører vacuum på tabeller, der overskrider tærsklerne. Som standard håndterer en håndfuld workers hele klyngen.

Justering pr. tabel

Aktive tabeller har fordel af aggressiv 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

Begrænser VACUUM's I/O, så forespørgsler i forgrunden ikke påvirkes. Standardværdien på PG 12+ er 2 ms — normalt passende. På SSD'er kan du sænke den:

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

Parallel VACUUM

Siden PG 13 udfører VACUUM oprydning af indeks parallelt:

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

VACUUM FULL: Hvornår og hvorfor

Omskriver tabellen fra bunden og frigiver plads til operativsystemet. Erhverver ACCESS EXCLUSIVE. Brug det kun som sidste udvej, eller brug i stedet pg_repack.

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

pg_repack: Onlinealternativ

Omskriver en tabel online uden en fuld lås. Giver samme resultat som VACUUM FULL, men er velegnet til produktion:

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

Overvågning af autovacuum

Se tidspunkterne for den seneste vacuum/analyze og antallet af døde tupler:

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

Når autovacuum kommer bagefter

Symptomer:

  • Opblæstheden vokser
  • n_dead_tup er høj i pg_stat_user_tables
  • Forespørgselsplanerne bliver dårligere

Løsninger: øg autovacuum_max_workers, sænk skaleringsfaktoren pr. tabel, og løs lange transaktioner, der blokerer vacuum.

Logning af VACUUM

Log langsomme vacuum-operationer for at kunne justere indstillingerne:

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

FREEZE

VACUUM "fryser" lejlighedsvis gamle tupler for at forhindre xid-overløb. Aggressiv autovacuum holder freeze-alderen lav og forhindrer akutte xid-overløbshændelser.

Opsummering

Autovacuum er afgørende; justér det efter arbejdsbelastningen.

  • Indstillinger for autovacuum pr. tabel på aktive tabeller
  • VACUUM FULL er sidste udvej — foretræk pg_repack
  • Overvåg n_dead_tup og last_autovacuum
  • Løs lange transaktioner, der blokerer oprydningen

Hurtigt tjek

Hvad er den sikreste måde at frigive diskplads på en aktiv produktionstabel uden en lås, der blokerer i lang tid?

Gratis at komme i gang

Lær SQL med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “VACUUM, autovacuum, vacuum_cost_delay” gratis?

Ja — hele teksten til “VACUUM, autovacuum, vacuum_cost_delay” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “VACUUM, autovacuum, vacuum_cost_delay”?

Finjustér autovacuum-tærskler, vacuum_cost_delay og parallel VACUUM til store tabeller. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “VACUUM, autovacuum, vacuum_cost_delay”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne SQL Academy-lektion?

Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. MVCC og årsager til bloat
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE og pg_statistic
  4. Indekser-only-scanninger og visibility map
← Tilbage til SQL Academy