Le recomendamos que use la característica autovacuum para mantener en buen estado su instancia de base de datos de PostgreSQL. Autovacuum automatiza el comienzo de los comandos VACUUM y ANALYZE. Comprueba las tablas con una gran cantidad de tuplas insertadas, actualizadas o eliminadas. Después de esta verificación, recupera el almacenamiento mediante la eliminación de datos obsoletos o tuplas de la base de datos de PostgreSQL.
De forma predeterminada, autovacuum está activado para las instancias de base de datos de Amazon RDS for PostgreSQL que crea por medio de cualquiera de los grupos de parámetros de base de datos de PostgreSQL predeterminados. Entre ellas se incluyen default.postgres10
, default.postgres11
, y así sucesivamente. Todos los grupos de parámetros predeterminados de la base de datos de PostgreSQL tienen un parámetro rds.adaptive_autovacuum
que se establece en 1
, lo que activa la característica. Otros parámetros de configuración asociados con la característica autovacuum también se establecen de forma predeterminada. Debido a que estos valores predeterminados son algo genéricos, puede beneficiarse de ajustar algunos de los parámetros asociados con la característica autovacuum para su carga de trabajo específica.
A continuación, puede encontrar más información sobre autovacuum y cómo ajustar algunos de sus parámetros en su instancia de base de datos de RDS for PostgreSQL. Para obtener información más específica, consultePrácticas recomendadas para trabajar con PostgreSQL.
Temas
Reducción de la probabilidad de reinicio del identificador de transacción
Determinar si las tablas de una base de datos necesitan vacío
Determinar qué tablas cumplen actualmente los requisitos de autovacuum
Determinar si autovacuum se está ejecutando actualmente y durante cuánto tiempo
Identificación y resolución de los bloqueadores de limpieza agresiva en RDS para PostgreSQL
Asignación de memoria para autovacuum
Uno de los parámetros más importantes que afectan al desempeño de autovacuum es el parámetro autovacuum_work_mem
autovacuum_work_mem
se establece en -1, lo que indica que en su lugar se utiliza la configuración de maintenance_work_mem
. En todas las demás versiones, autovacuum_work_mem
se determina mediante GREATEST({DBInstanceClassMemory/32768}, 65536).
Las operaciones de limpieza manual siempre utilizan la configuración de maintenance_work_mem
, con la configuración predeterminada de GREATEST ({DBInstanceClassMemory/63963136*1024}, 65536), y también se puede ajustar en la sesión mediante el comando SET
para operaciones manuales de VACUUM
más específicas.
autovacuum_work_mem
determina que la memoria de autovacuum conserve los identificadores de tuplas inactivas (pg_stat_all_tables.n_dead_tup
) para los índices de limpieza.
Cuando realice los cálculos para determinar el valor del parámetro autovacuum_work_mem
, tenga en cuenta lo siguiente:
-
Si define el parámetro en un valor demasiado bajo, el proceso de limpieza puede tener que examinar la tabla varias veces para completar su trabajo. Esta variedad de análisis puede tener un impacto negativo en el rendimiento. Para instancias mayores, configurar
maintenance_work_mem
oautovacuum_work_mem
a 1 GB como mínimo puede mejorar el rendimiento de las tablas de limpieza con un número elevado de tuplas inactivas. Sin embargo, en las versiones 16 y anteriores de PostgreSQL, el uso de memoria de la operación de limpieza está limitado a 1 GB, que es suficiente para procesar aproximadamente 179 millones de tuplas inactivas de una sola pasada. Si una tabla tiene más tuplas inactivas que las indicadas, la operación de limpieza tendrá que realizar varias pasadas por los índices de la tabla, lo que aumentará considerablemente el tiempo necesario. A partir de la versión 17 de PostgreSQL, no hay un límite de 1 GB y autovacuum puede procesar más de 179 millones de tuplas mediante árboles radix.Un identificador de tupla tiene un tamaño de 6 bytes. Con el fin de calcular la memoria necesaria para limpiar un índice de una tabla, realice una consulta a
pg_stat_all_tables.n_dead_tup
para buscar el número de tuplas inactivas y, a continuación, multiplique este número por 6 para determinar la memoria necesaria para limpiar el índice de una sola pasada. Puede utilizar la siguiente consulta:SELECT relname AS table_name, n_dead_tup, pg_size_pretty(n_dead_tup * 6) AS estimated_memory FROM pg_stat_all_tables WHERE relname = '
name_of_the_table
'; -
El parámetro
autovacuum_work_mem
funciona en combinación con el parámetroautovacuum_max_workers
. Cada empleado deautovacuum_max_workers
puede utilizar la memoria que asigne. Si tiene demasiadas tablas pequeñas, asigne másautovacuum_max_workers
y menosautovacuum_work_mem
. Si tiene tablas grandes (de 100 GB o más), asigne más memoria y menos procesos de trabajo. Debe tener suficiente memoria asignada para que funcione en la tabla más grande. Por lo tanto, asegúrese de que la combinación de procesos de trabajo y memoria sea igual a la memoria total que desea asignar.
Reducción de la probabilidad de reinicio del identificador de transacción
En algunos casos, la configuración de grupos de parámetros relacionada con autovacuum puede no ser lo suficientemente agresiva como para evitar el reinicio del identificador de transacción. Para solucionar esto, RDS for PostgreSQL proporciona un mecanismo que adapta los valores de los parámetros de autovacuum automáticamente. El ajuste de parámetros autovacuum adaptativo es una característica de RDS para PostgreSQL. Puede encontrar una explicación detallada sobre el reinicio del identificador de transacción
El ajuste de parámetros de autovacuum adaptativo está activado de forma predeterminada para las instancias de RDS for PostgreSQL con el parámetro dinámico rds.adaptive_autovacuum
establecido en ON (Activado). Le recomendamos encarecidamente que mantenga esta opción activada. Sin embargo, para apagar el ajuste de parámetros autovacuum adaptativo, establezca el parámetro rds.adaptive_autovacuum
en 0 u OFF.
El reinicio de identificador de transacción sigue siendo posible incluso cuando Amazon RDS ajusta los parámetros de autovacuum. Le animamos a implementar una alarma Amazon CloudWatch para el reinicio de identificador de transacción. Para obtener más información, consulte la publicación Implement an early warning system for transaction ID wraparound in RDS for PostgreSQL
Con el ajuste de parámetros de autovacuum adaptable activado, Amazon RDS comienza a ajustar los parámetros de autovacuum cuando la métrica de CloudWatch MaximumUsedTransactionIDs
alcanza el valor del parámetro autovacuum_freeze_max_age
o 500 000 000, el que sea mayor.
Amazon RDS continúa ajustando los parámetros para el autovacuum si una tabla continúa tendiendo hacia el ajuste de ID de transacción. Cada uno de estos ajustes dedica más recursos a autovacuum para evitar el reinicio. Amazon RDS actualiza los siguientes parámetros relacionados con autovacuum:
RDS modifica estos parámetros solo si el nuevo valor hace que autovacuum sea más agresivo. Estos parámetros se modifican en la memoria en la instancia de base de datos. Los valores en el grupo de parámetros no han cambiado. Para ver la configuración en memoria actual, utilice el comando de SQL PostgreSQL SHOW
Cuando Amazon RDS modifica alguno de estos parámetros de autovacuum, genera un evento para la instancia de base de datos afectada. Este evento se puede ver en la AWS Management Console y a través de la API de Amazon RDS. Una vez que la métrica CloudWatch MaximumUsedTransactionIDs
vuelve por debajo del límite, Amazon RDS restablece los parámetros relacionados con el autovacuum en la memoria a los valores especificados en el grupo de parámetros. Luego, genera otro evento correspondiente a este cambio.