Determinar si autovacuum se está ejecutando actualmente y durante cuánto tiempo - Amazon Relational Database Service

Determinar si autovacuum se está ejecutando actualmente y durante cuánto tiempo

Si necesita aspirar manualmente una tabla, asegúrese de determinar si el autovacuum se está ejecutando actualmente. Si es así, es posible que deba ajustar los parámetros para que funcione de manera más eficiente o desactivar el autovacuum temporalmente para que pueda ejecutar manualmente VACUUM.

Use la siguiente consulta para determinar si se está ejecutando autovacuum, cuánto tiempo lleva en ejecución y si se encuentra en espera en otra sesión.

SELECT datname, usename, pid, state, wait_event, current_timestamp - xact_start AS xact_runtime, query FROM pg_stat_activity WHERE upper(query) LIKE '%VACUUM%' ORDER BY xact_start;

Después de ejecutar la consulta, debería ver un resultado similar al siguiente.

datname | usename | pid | state | wait_event | xact_runtime | query --------+----------+-------+--------+------------+-------------------------+-------------------------------------------------------------------------------------------------------- mydb | rdsadmin | 16473 | active | | 33 days 16:32:11.600656 | autovacuum: VACUUM ANALYZE public.mytable1 (to prevent wraparound) mydb | rdsadmin | 22553 | active | | 14 days 09:15:34.073141 | autovacuum: VACUUM ANALYZE public.mytable2 (to prevent wraparound) mydb | rdsadmin | 41909 | active | | 3 days 02:43:54.203349 | autovacuum: VACUUM ANALYZE public.mytable3 mydb | rdsadmin | 618 | active | | 00:00:00 | SELECT datname, usename, pid, state, wait_event, current_timestamp - xact_start AS xact_runtime, query+ | | | | | | FROM pg_stat_activity + | | | | | | WHERE query like '%VACUUM%' + | | | | | | ORDER BY xact_start; +

Existen varios problemas que pueden provocar una sesión de autovaccum de larga duración (es decir, que tarde varios días). El problema más común es que el valor del parámetro maintenance_work_mem sea demasiado bajo para el tamaño de la tabla o la velocidad de las actualizaciones.

Le recomendamos que utilice la siguiente fórmula para establecer el valor del parámetro maintenance_work_mem.

GREATEST({DBInstanceClassMemory/63963136*1024},65536)

Las sesiones de autovacuum con una duración corta también pueden indicar problemas:

  • Pueden indicar que no hay un número de autovacuum_max_workers suficientemente alto para la carga de trabajo. En ese caso, tendrá que especificar el número de procesos de trabajo.

  • Puede indicar que hay una corrupción de índice (autovacuum falla y se reinicia en la misma relación pero no avanza). En este caso, ejecute un manual vacuum freeze verbose table para ver la causa exacta.