Explicar el propósito de vacío y autovacuo

Completado

Cuando se actualiza una fila, cada actualización se compone de una inserción y una eliminación. Los datos modificados se insertan y se elimina la fila anterior. 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 siguen en el disco, pero que ya no son necesarias.

El proceso de vacío apropiadamente llamado elimina permanentemente estas filas, recuperando el espacio que de otra manera podría perderse y actualizando las estadísticas.

El proceso de limpieza de las filas muertas se denomina proceso de vacío. 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 siguientes motivos:

  • Para recuperar el espacio en disco ocupado por filas marcadas para su eliminación.
  • Para actualizar las estadísticas de datos para su uso por parte del planificador de consultas.
  • Para actualizar el mapa de visibilidad, que acelera escaneos de solo índice.
  • Para protegerse frente a la pérdida de datos antiguos debido al ajuste del identificador de transacción.

PostgreSQL usa un proceso denominado vacío para eliminar filas de forma permanente y reclamar el espacio. Además de liberar espacio, también garantiza que los índices sean efectivos.

Cuando el proceso de vacío se desencadena automáticamente, el proceso se conoce como autovacuum. 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.

Ejecutar el proceso de aspiración periódicamente garantiza que no:

  • Experimenta "hinchazón", como bases de datos y tablas más grandes de lo necesario.
  • Tener í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 vacío manualmente, escriba:

vacuum