VACUUM, autovacuum, vacuum_cost_delay
Ajuste los umbrales de autovacuum, vacuum_cost_delay y VACUUM en paralelo para tablas grandes.
VACUUM, autovacuum, vacuum_cost_delay es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Tres modos de VACUUM
VACUUM(perezoso): recupera filas muertas, actualiza el mapa de espacio libre y no requiere un bloqueo exclusivoVACUUM FULL: reescribe la tabla, requiere un bloqueo exclusivo y devuelve el espacio en disco al sistema operativoVACUUM ANALYZE: ejecuta vacuum y actualiza las estadísticas del planificador en una sola operación
Ejecutar VACUUM manualmente
A veces resulta útil incluso con autovacuum:
VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders; -- parallel index cleanup (PG 13+)Proceso de autovacuum
Un lanzador en segundo plano inicia procesos de trabajo que ejecutan vacuum en las tablas que superan los umbrales. De forma predeterminada, un pequeño grupo de procesos se encarga del clúster.
Ajustes por tabla
Las tablas con mucha actividad se benefician de un autovacuum agresivo:
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 la E/S de VACUUM para que no perjudique a las consultas en primer plano. El valor predeterminado desde PG 12 es de 2 ms, que normalmente es adecuado. En SSD puede reducirlo:
autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.VACUUM en paralelo
VACUUM paraleliza la limpieza de índices desde PG 13:
VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).VACUUM FULL: cuándo y por qué
Reescribe la tabla desde cero y devuelve el espacio al sistema operativo. Adquiere ACCESS EXCLUSIVE. Úselo solo como último recurso o utilice pg_repack en su lugar.
VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.pg_repack: alternativa en línea
Reescribe una tabla en línea, sin un bloqueo total. Tiene el mismo efecto que VACUUM FULL, pero es adecuado para producción:
pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.Supervisar autovacuum
Consulte las horas de la última operación de vacuum/analyze y el número de tuplas muertas:
SELECT relname,
n_live_tup, n_dead_tup,
last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;Cuando autovacuum se queda atrás
Síntomas:
- El bloat aumenta
- n_dead_tup es alto en pg_stat_user_tables
- Los planes de consulta se degradan
Soluciones: aumente autovacuum_max_workers, reduzca el factor de escala por tabla y corrija las transacciones prolongadas que bloquean vacuum.
Registro de vacuum
Para realizar ajustes, registre los vacuum lentos:
log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.FREEZE
VACUUM "congela" ocasionalmente las tuplas antiguas para evitar el desbordamiento de xid. Un autovacuum agresivo mantiene bajas las edades de congelación y evita eventos de desbordamiento de emergencia.
Resumen
Autovacuum es esencial; ajústelo según la carga de trabajo.
- Ajustes de autovacuum por tabla para tablas con mucha actividad
- VACUUM FULL es el último recurso: prefiera pg_repack
- Supervise n_dead_tup y last_autovacuum
- Corrija las transacciones prolongadas que bloquean la limpieza
Comprobación rápida
¿Cuál es la forma más segura de recuperar espacio en disco en una tabla de producción con mucha actividad sin mantener un bloqueo prolongado?
Preguntas frecuentes
¿La lección «VACUUM, autovacuum, vacuum_cost_delay» es gratis?
Sí — el texto completo de «VACUUM, autovacuum, vacuum_cost_delay» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «VACUUM, autovacuum, vacuum_cost_delay»?
Ajuste los umbrales de autovacuum, vacuum_cost_delay y VACUUM en paralelo para tablas grandes. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «VACUUM, autovacuum, vacuum_cost_delay»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- MVCC y causas de la fragmentación
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE y pg_statistic
- Escaneos solo de índice y mapa de visibilidad