Determinar si las tablas de una base de datos necesitan vacío - Amazon Relational Database Service

Determinar si las tablas de una base de datos necesitan vacío

Puede utilizar la siguiente consulta para mostrar el número de transacciones sin vaciar en una base de datos. La columna datfrozenxid de una fila pg_database de una base de datos es un límite inferior en los identificadores de transacción normales que aparecen en esa base de datos. Esta columna es el mínimo de los valores relfrozenxid por tabla dentro de la base de datos.

SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age(datfrozenxid) desc limit 20;

Por ejemplo, los resultados de ejecutar la consulta anterior podrían ser los siguientes.

datname | age mydb | 1771757888 template0 | 1721757888 template1 | 1721757888 rdsadmin | 1694008527 postgres | 1693881061 (5 rows)

Cuando la antigüedad de una base de datos llega a los dos mil millones de identificadores de transacción, se produce el reinicio de los TransactionID (XID) y la base de datos cambia al modo de solo lectura. Puede usar esta consulta para generar una métrica y ejecutarla varias veces al día. De manera predeterminada, autovacuum está configurado para mantener la antigüedad de las transacciones en un máximo de 200,000,000 (autovacuum_freeze_max_age).

Una estrategia de monitorización de muestra podría ser la siguiente:

  • Establezca el valor autovacuum_freeze_max_age en 200 millones de transacciones.

  • Si una tabla llega a 500 millones de transacciones sin vaciar, se dispara una alarma de gravedad baja. No es un valor disparatado, pero podría indicar que autovacuum no puede mantener el ritmo.

  • Si una tabla llega a mil millones, se debe interpretar como una alarma para adoptar medidas. En general, conviene mantener las antigüedades más cerca de autovacuum_freeze_max_age por motivos de rendimiento. Le recomendamos que investigue utilizando las recomendaciones que siguen.

  • Si una tabla llega a 1500 millones de transacciones sin vaciar, se dispara una alarma de gravedad alta. En función de la velocidad con la que la base de datos use los identificadores de transacción, esta alarma puede indicar que el sistema está agotando el tiempo para ejecutar autovacuum. En ese caso, le recomendamos una solución inmediata.

Si una tabla supera constantemente estos límites, modifique aún más sus parámetros de autovacuum. De manera predeterminada, usar VACUUM manualmente (que tiene deshabilitados los retardos basados en el costo) es un procedimiento más agresivo que usar el autovacuum predeterminado, pero es también más intrusivo para el sistema en su conjunto.

Le recomendamos lo siguiente: