Vacuum de PostgreSQL – Mantenimiento del Catálogo Bacula

Ejecutar periódicamente los comandos vacuum analyze y vacuum full en PostgreSQL es esencial para mantener el rendimiento y la integridad de la base de datos. La importancia de cada uno de estos comandos se explica a continuación.

1. vacuum analyze

  • Actualización de estadísticas: El comando vacuum analyze va más allá del vacuum básico, ya que también actualiza las estadísticas de la base de datos. Estas estadísticas son vitales para que el optimizador de consultas de PostgreSQL tome decisiones inteligentes sobre cómo ejecutar consultas de manera eficiente. Sin estadísticas actualizadas, el optimizador puede tomar decisiones de plan de consulta subóptimas.
  • Mejora del rendimiento de las consultas: Al actualizar las estadísticas, el vacuum analyze ayuda a la base de datos a tomar decisiones más informadas sobre cómo acceder a los datos, lo que a su vez mejora el rendimiento de las consultas.

2. vacuum full

  • Eliminación de registros obsoletos: PostgreSQL utiliza un mecanismo de almacenamiento llamado Multiversion Concurrency Control (MVCC) para controlar las transacciones concurrentes. Esto significa que los registros no se eliminan inmediatamente cuando se borran o actualizan, sino que se marcan como obsoletos. El vacuum se encarga de eliminar estos registros obsoletos, liberando espacio en disco y mejorando el rendimiento.
  • Prevención de la fragmentación: La fragmentación ocurre cuando las tablas de la base de datos acumulan registros obsoletos que no se han limpiado. El vacuum ayuda a prevenir la fragmentación, asegurando que la base de datos no crezca innecesariamente y que las consultas se ejecuten de manera más eficiente.
  • Reorganización del espacio en disco: El vacuum también puede reorganizar los datos en el disco, mejorando la eficiencia del acceso a los registros y reduciendo la fragmentación del disco.

En cuanto a Bacula, las demoras en las consultas (por ejemplo, la selección de registros de trabajo en Bweb) se han resuelto en escenarios de producción específicos mediante la ejecución de un vacuum. Dado que Bacula está constantemente reciclando copias de seguridad y «podando» información del catálogo, se recomienda ejecutar vacuum analyze semanalmente y vacuum full cada tres meses.

A continuación, se muestran ejemplos de trabajos administrativos de Bacula para ejecución automatizada.

3. Ejemplo de trabajos administrativos de vacuum y vacuum analyze en Bacula

El vacuum analyze debe ejecutarse en una programación semanal como se muestra en el siguiente ejemplo.

Job {
  Name = "admin-vacuum-weekly"
  Type = Admin
  JobDefs = BackupsToDisk
  RunBeforeJob = "vacuumdb -z -q -j 2 -d bacula"
  Schedule = admin-weekly
  ...
}

Schedule {
  Name = "admin-weekly"
  Run = Mon at 14:00
}

El vacuum full debe ejecutarse cada tres meses como se muestra en el siguiente ejemplo.

Job {
  Name = "admin-vacuum-analyze-trimestral"
  Type = Admin
  JobDefs = BackupsToDisk
  RunBeforeJob = "vacuumdb -f -q -d bacula"
  Schedule = admin-trimestral
  ...
}

Schedule {
  Name = "admin-trimestral"
  Run = Jan, Apr, Jul, Oct at 14:00
}

Según las Figuras 1 y 2, las configuraciones mencionadas anteriormente se pueden realizar gráficamente a través de Bweb.

Vacuum de PostgreSQL - Mantenimiento del Catálogo Bacula 1Vacuum de PostgreSQL - Mantenimiento del Catálogo Bacula 2

Figuras 1 y 2. Configuración de trabajos administrativos de vacuum analyze y full (Bweb).

Incluso si se selecciona solo la base de datos «bacula» para la ejecución de vacuum, es posible que el comando vacuumdb imprima advertencias como las que se muestran a continuación.

2023-09-07 08:37:55 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_shdepend" --- only superuser can vacuum it
2023-09-07 08:37:55 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_authid" --- only superuser can vacuum it
2023-09-07 08:37:55 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_database" --- only superuser can vacuum it
2023-09-07 08:37:55 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_db_role_setting" --- only superuser can vacuum it
2023-09-07 08:37:55 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_tablespace" --- only superuser can vacuum it
2023-09-07 08:37:55 ebacula-dir JobId 40551

: BeforeJob: WARNING:  skipping "pg_auth_members" --- only superuser can vacuum it
2023-09-07 08:37:55 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_shdescription" --- only superuser can vacuum it
2023-09-07 08:37:56 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_subscription" --- only superuser can vacuum it
2023-09-07 08:37:56 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_shseclabel" --- only superuser can vacuum it
2023-09-07 08:37:56 ebacula-dir JobId 40551: BeforeJob: WARNING:  skipping "pg_replication_origin" --- only superuser can vacuum it

Estas advertencias pueden ignorarse.

A partir de la versión PostgreSQL 16, sin embargo, existe un nuevo tipo de permiso que se puede otorgar al usuario de Bacula para mitigar estas advertencias, como se muestra en el comando de ejemplo de psql a continuación.

grant pg_vacuum_all_tables to bacula;

Ref.: https://www.cybertec-postgresql.com/en/grant-vacuum-analyze-postgresql-16

Disponível em: pt-brPortuguês (Portugués, Brasil)enEnglish (Inglés)esEspañol

Deja una respuesta