PostgreSQL: demonio AUTOVACUUM

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

PostgreSQL: demonio AUTOVACUUM

Este tutorial de PostgreSQL explica más sobre Demonio AUTOVACÍO.

describir

El daemon AUTOVACUUM, introducido en PostgreSQL 8.1, es una función opcional que limpia automáticamente la base de datos para que no tenga que ejecutar instrucciones VACUUM manualmente. El demonio AUTOVACUUM está habilitado en la configuración predeterminada.

El demonio AUTOVACUUM consta de varios procesos que recuperan el almacenamiento mediante la eliminación de datos obsoletos o tuplas de la base de datos. Comprueba si hay tablas con una gran cantidad de registros insertados, actualizados o eliminados y los limpia de acuerdo con los siguientes ajustes de configuración.

Configuración predeterminada

La configuración AUTOVACUUM de PostgreSQL se puede encontrar en el archivo postgresql.conf y controla cuándo y cómo se ejecuta el demonio. Los siguientes son ejemplos de estos ajustes:

#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------

autovacuum = on                        # Enable autovacuum subprocess?  'on'
                                       # requires track_counts to also be on.

log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and
                                       # their durations, > 0 logs only
                                       # actions running at least this number
                                       # of milliseconds.

autovacuum_max_workers = 3             # max number of autovacuum subprocesses
                                       # (change requires restart)

autovacuum_naptime = 1min              # time between autovacuum runs

autovacuum_vacuum_threshold = 50       # min number of row updates before vacuum

autovacuum_analyze_threshold = 50      # min number of row updates before analyze

autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum

autovacuum_analyze_scale_factor = 0.1  # fraction of table size before analyze

autovacuum_freeze_max_age = 200000000  # maximum XID age before forced vacuum
                                       # (change requires restart)

autovacuum_multixact_freeze_max_age = 400000000
                                       # maximum multixact age
                                       # before forced vacuum
                                       # (change requires restart)

autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for
                                       # autovacuum, in milliseconds;
                                       # -1 means use vacuum_cost_delay

autovacuum_vacuum_cost_limit = -1      # default vacuum cost limit for
                                       # autovacuum, -1 means use
                                       # vacuum_cost_limit

configuración actual

Puede ver la configuración de VACÍO AUTOMÁTICO de una de dos maneras. Puede abrir el archivo postgresql.conf y ver el parámetro AUTOVACUUM (ver arriba). Alternativamente, si ha iniciado sesión en la base de datos, puede ejecutar la siguiente consulta:

SELECT *
FROM pg_settings 
WHERE name LIKE 'autovacuum%'

Esta consulta devolverá la configuración actual del sistema para el demonio AUTOVACUUM, pero es importante tener en cuenta que no puede actualizar esta configuración mediante la consulta.

Ajustes de actualización

Para cambiar la configuración del demonio AUTOVACUUM, debe ubicar y editar la configuración almacenada en el archivo postgresql.conf. La ubicación del archivo postgresql.conf variará según su sistema.

Una vez que haya editado la configuración en el archivo postgresql.conf, deberá reiniciar la base de datos para que los cambios surtan efecto.

Deshabilitar AUTOVACUUM en la mesa

Cuando la configuración del sistema para AUTOVACUUM está activada, puede desactivar la limpieza automática para tablas específicas (si lo desea). Esto se hace ejecutando una consulta en la base de datos.

La sintaxis para deshabilitar el vacío automático para una tabla en PostgreSQL es:

ALTER TABLE table_name SET (autovacuum_enabled = false);

table_name La tabla que no desea que se vacíe automáticamente.

Por ejemplo:

ALTER TABLE products SET (autovacuum_enabled = false);

En este ejemplo, el daemon AUTOVACUUM se anula para que la tabla de productos no se limpie automáticamente.

Si no está seguro de si la función AUTOVACUUM de la tabla se ha deshabilitado, puede ejecutar la siguiente consulta:

SELECT reloptions
FROM pg_class
WHERE relname="products";

Esto devolverá la configuración de AUTOVACUUM para la tabla de productos. Si AUTOVACUUM está deshabilitado, su consulta devolverá algo como esto:

         reloptions         
----------------------------
 {autovacuum_enabled=false}
(1 row)

En este ejemplo, la tabla de productos tiene autovacuum_enabled establecido en falso. Esto significa que el demonio AUTOVACUUM no intentará limpiar la tabla de productos.