1. Glossario/

VACUUM

PostgreSQL VACUUM

VACUUM è il comando PostgreSQL che recupera lo spazio occupato dai dead tuples (righe morte) e lo rende disponibile per nuovi inserimenti. Non restituisce spazio al sistema operativo, non riorganizza la tabella e non compatta nulla — segna le pagine come riscrivibili.

Come funziona #

VACUUM tabella scansiona la tabella, identifica i dead tuples non più visibili a nessuna transazione e ne marca lo spazio come riutilizzabile. È un’operazione leggera che non blocca le scritture e può girare in parallelo con le query normali. VACUUM FULL invece riscrive fisicamente l’intera tabella con lock esclusivo — da usare rarissimamente e solo in emergenza.

A cosa serve #

Senza VACUUM, le tabelle con alto traffico di UPDATE e DELETE accumulano dead tuples che occupano spazio su disco e rallentano le scansioni sequenziali. Il VACUUM è il meccanismo di pulizia essenziale che bilancia il costo del modello MVCC di PostgreSQL.

Perché è critico #

L’autovacuum esegue VACUUM automaticamente, ma con i default di PostgreSQL può attivarsi troppo raramente su tabelle ad alto traffico. Su una tabella con 10 milioni di righe, il default aspetta 2 milioni di dead tuples prima di intervenire — abbastanza per degradare visibilmente le performance.