Identificación y resolución de los bloqueadores de vaciado intensivo en RDS para PostgreSQL - Amazon Relational Database Service

Identificación y resolución de los bloqueadores de vaciado intensivo en RDS para PostgreSQL

En PostgreSQL, la limpieza es fundamental para garantizar el buen estado de la base de datos, ya que recupera espacio de almacenamiento y evita problemas relacionados con los identificadores de transacciones. Sin embargo, hay situaciones que pueden impedir que el vaciado funcione como es debido, lo que puede mermar el rendimiento, provocar una sobrecarga de almacenamiento e incluso afectar a la disponibilidad de la instancia de base de datos debido a la superposición de ID de transacción. Por lo tanto, identificar y resolver estos problemas es esencial para lograr un rendimiento y una disponibilidad óptimos de la base de datos. Consulte Understanding autovacuum in Amazon RDS for PostgreSQL environments si desea conocer mejor la limpieza automática.

La función postgres_get_av_diag() ayuda a identificar los problemas que impiden o retrasan el avance de la limpieza agresiva. Se proporcionan sugerencias, entre otras, comandos para resolver el problema si es identificable o indicaciones para realizar diagnósticos adicionales cuando no se puede identificar el problema. Los bloqueadores de limpieza agresiva aparecen cuando su antigüedad supera el umbral de vacío automático adaptativo establecido por RDS, que es de 500 millones de identificadores de transacciones.

¿Qué antigüedad tiene el identificador de la transacción?

La función age() de identificadores de transacción calcula el número de transacciones que se han producido desde el identificador de transacción descongelado más antiguo de una base de datos (pg_database.datfrozenxid) o tabla (pg_class.relfrozenxid). Este valor indica la actividad de la base de datos desde la última operación de limpieza agresiva y resalta la carga de trabajo probable para los próximos procesos de LIMPIEZA.

¿Qué es una limpieza agresiva?

Una operación de LIMPIEZA agresiva lleva a cabo un escaneo exhaustivo de todas las páginas de una tabla, incluidas las que normalmente se omiten durante las limpiezas normales. Este análisis exhaustivo tiene como objetivo congelar los ID de transacción que se acercan a su antigüedad máxima, evitando de forma eficaz una situación conocida como superposición de identificadores de transacción.

Para que postgres_get_av_diag() pueda detectar bloqueadores, el bloqueador debe haber realizado al menos 500 millones de transacciones.