0Pricing
SQL Academy · Lezione

VACUUM, autovacuum, vacuum_cost_delay

Ottimizzi le soglie di autovacuum, vacuum_cost_delay e il VACUUM parallelo per tabelle di grandi dimensioni.

VACUUM, autovacuum, vacuum_cost_delay è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Tre modalità di VACUUM

  • VACUUM (lazy) — recupera le tuple morte, aggiorna la free space map e non acquisisce un lock esclusivo
  • VACUUM FULL — riscrive la tabella, acquisisce un lock esclusivo e restituisce lo spazio su disco al sistema operativo
  • VACUUM ANALYZE — esegue il vacuum e aggiorna le statistiche del planner in un'unica operazione

Esecuzione manuale di VACUUM

A volte è utile anche con autovacuum:

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

Processo di autovacuum

Un launcher in background avvia worker che eseguono il vacuum sulle tabelle che superano le soglie. Per impostazione predefinita, un numero ridotto di worker gestisce il cluster.

Ottimizzazione per tabella

Le tabelle molto attive traggono vantaggio da un autovacuum aggressivo:

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

Limita l'I/O di VACUUM per evitare di penalizzare le query in primo piano. Il valore predefinito in PG 12+ è 2 ms, generalmente adeguato. Per gli SSD può ridurlo:

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

VACUUM parallelo

A partire da PG 13, VACUUM esegue la pulizia degli indici in parallelo:

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

VACUUM FULL: quando e perché

Riscrive la tabella da zero e restituisce lo spazio al sistema operativo. Acquisisce ACCESS EXCLUSIVE. Lo utilizzi solo come ultima risorsa oppure preferisca pg_repack.

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

pg_repack: alternativa online

Riscrive una tabella online, senza un lock completo. Ha lo stesso effetto di VACUUM FULL, ma è adatto agli ambienti di produzione:

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

Monitoraggio di autovacuum

Visualizzi gli orari dell'ultimo vacuum e analyze e il numero di tuple morte:

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

Quando autovacuum resta indietro

Sintomi:

  • Il bloat aumenta
  • n_dead_tup è elevato in pg_stat_user_tables
  • I piani delle query peggiorano

Correzioni: aumenti autovacuum_max_workers, riduca il fattore di scala per tabella e corregga le transazioni lunghe che bloccano il vacuum.

Logging di VACUUM

Per l'ottimizzazione, registri i vacuum lenti:

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

FREEZE

VACUUM occasionalmente «congela» le tuple meno recenti per evitare il wraparound degli xid. Un autovacuum aggressivo mantiene bassa l'età di congelamento e previene gli eventi di wraparound di emergenza.

Riepilogo

Autovacuum è essenziale: lo ottimizzi in base al carico di lavoro.

  • Impostazioni di autovacuum specifiche per le tabelle molto attive
  • VACUUM FULL è l'ultima risorsa: preferisca pg_repack
  • Monitori n_dead_tup e last_autovacuum
  • Corregga le transazioni lunghe che bloccano la pulizia

Verifica rapida

Qual è il modo più sicuro per recuperare spazio su disco in una tabella di produzione molto attiva senza un lock che blocchi a lungo?

Domande Frequenti

La lezione «VACUUM, autovacuum, vacuum_cost_delay» è gratuita?

Sì — il testo completo di «VACUUM, autovacuum, vacuum_cost_delay» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «VACUUM, autovacuum, vacuum_cost_delay»?

Ottimizzi le soglie di autovacuum, vacuum_cost_delay e il VACUUM parallelo per tabelle di grandi dimensioni. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «VACUUM, autovacuum, vacuum_cost_delay»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. MVCC e cause del bloat
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE e pg_statistic
  4. Scansioni solo indice e Visibility Map
← Torna a SQL Academy