Todos los términos del glosario

VACUUM y autovacuum

¿Qué hace VACUUM en PostgreSQL?

VACUUM recupera el espacio que ocupan las versiones muertas de filas que dejan las actualizaciones y eliminaciones, actualiza el mapa de visibilidad y evita el reinicio cíclico (wraparound) de los ID de transacción. Autovacuum lo ejecuta por ti.

Debido a MVCC, un UPDATE o DELETE en PostgreSQL no elimina de inmediato la versión anterior de la fila; esa versión se convierte en una tupla muerta cuando ya ninguna transacción puede verla. VACUUM encuentra las tuplas muertas y marca su espacio como reutilizable para filas nuevas de la misma tabla.

VACUUM simple se ejecuta junto con las lecturas y escrituras normales y, por lo general, no reduce el tamaño de los archivos de la tabla en disco. VACUUM FULL reescribe la tabla para devolver espacio al sistema operativo, pero mantiene un bloqueo exclusivo durante todo el proceso. VACUUM también actualiza el mapa de visibilidad, lo que ayuda a los escaneos de solo índice, y congela filas antiguas para evitar el reinicio cíclico de los ID de transacción. El daemon autovacuum ejecuta VACUUM y ANALYZE automáticamente, así que las ejecuciones manuales son útiles sobre todo después de grandes cambios por lotes.

Ejemplo

El ejemplo actualiza todas las filas de una tabla, lo que deja 10 000 versiones de filas muertas, y ejecuta VACUUM (VERBOSE) para informar qué limpió. La consulta de estadísticas posterior muestra cuándo se ejecutó VACUUM manualmente en la tabla por última vez.

CREATE TABLE items (id int PRIMARY KEY, qty int);
INSERT INTO items SELECT g, 0 FROM generate_series(1, 10000) AS g;
UPDATE items SET qty = qty + 1;

VACUUM (VERBOSE) items;

SELECT relname, last_vacuum, n_dead_tup
FROM pg_stat_user_tables
WHERE relname = 'items';

SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.

Fuentes

Documentación oficial de PostgreSQL (en inglés).

Términos relacionados