Cómo hacer VACUUM y ANALYZE en PostgreSQL y afinar el autovacuum
PostgreSQL no borra físicamente las filas actualizadas o eliminadas de inmediato: deja versiones muertas que VACUUM limpia. ANALYZE mantiene las estadísticas que el planificador usa para elegir buenos planes.
- 1
Ejecuta VACUUM y ANALYZE de mantenimiento
VACUUM marca el espacio de filas muertas como reutilizable; ANALYZE actualiza las estadísticas. VACUUM normal no bloquea las escrituras.
VACUUM ANALYZE clientes; - 2
Revisa cuántas filas muertas tiene cada tabla
pg_stat_user_tables muestra n_dead_tup y la última vez que corrió el autovacuum. Muchas filas muertas indican que el autovacuum no está al día.
SELECT relname, n_live_tup, n_dead_tup, last_autovacuum FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 10; - 3
Ajusta el autovacuum en tablas con mucha escritura
Para tablas muy activas conviene bajar el umbral de escala para que el autovacuum corra más seguido, en lugar de tocar el global.
ALTER TABLE pedidos SET (autovacuum_vacuum_scale_factor = 0.05); - 4
Recupera espacio en disco con VACUUM FULL (con cuidado)
VACUUM FULL sí devuelve espacio al sistema, pero reescribe la tabla y toma un bloqueo exclusivo: nadie puede leer ni escribir mientras corre.
VACUUM FULL clientes;
// el error común
Desactivar el autovacuum para ganar rendimiento es un error clásico: sin él, las tablas acumulan bloat y, peor, se acerca el wraparound de transacciones que puede detener toda la base. Casi nunca conviene apagarlo.
// cuándo conviene un experto
Cuando hay bloat crónico, VACUUM FULL no es opción por el bloqueo, o te acercas al riesgo de wraparound, el mantenimiento requiere planeación. En dba.mx afinamos el autovacuum por tabla y usamos herramientas como pg_repack para recuperar espacio sin detener la operación.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.