Explicación del propósito del vaciado y el vaciado automático
Cuando se actualiza una fila, cada actualización se compone de una inserción y una eliminación. Se insertan los datos modificados y se elimina la fila antigua. En PostgreSQL, la fila original se conserva para que una transacción pueda revertirse si hay un problema. En lugar de eliminar la fila original, se marca para su eliminación más adelante, lo que da lugar a filas "inactivas" (o tuplas) que permanecen en el disco, pero que ya no son necesarias.
El proceso de vaciado quita permanentemente estas filas, recupera un espacio que, de lo contrario, podría perderse y actualiza las estadísticas.
El proceso de limpieza de filas inactivas se denomina proceso de vaciado. Si estas filas se dejaran en el disco, la base de datos ocuparía más espacio en disco que requería, conocido como "hinchazón" de la base de datos. El proceso VACUUM es importante por los motivos siguientes:
- Para recuperar el espacio en disco que ocupan filas marcadas para su eliminación.
- Para actualizar las estadísticas de datos para que las use el planificador de consultas.
- Para actualizar el mapa de visibilidad, lo que acelera los exámenes solo de índice.
- Para protegerse frente a la pérdida de datos antiguos debido al ajuste del identificador de transacción.
PostgreSQL usa un proceso denominado vaciado para eliminar filas de forma permanente y recuperar espacio. Además de recuperar espacio, también garantiza que los índices sean efectivos.
Cuando el proceso de vaciado se desencadena automáticamente, se conoce como vaciado automático. La frecuencia con la que el proceso debe ejecutarse depende de la cantidad de operaciones de actualización y eliminación. También puede supervisar el número de filas marcadas para su eliminación.
El hecho de ejecutar el proceso de vaciado periódicamente garantiza lo siguiente:
- Experimente "hinchazón", incluidas las bases de datos y tablas necesarias más grandes que las necesarias.
- No tendrá índices grandes y poco óptimos.
- No experimentará un aumento de E/S.
Para supervisar el número de filas "inactivas" de una tabla, puede ejecutar una consulta SELECT:
SELECT relname, n_dead_tup, n_live_tup
FROM pg_catalog.pg_stat_all_tables
ORDER BY n_dead_tup DESC;
Para ejecutar el proceso de vaciado manualmente, escriba lo siguiente:
vacuum