Identificar e resolver bloqueadores de limpeza agressivos no Aurora PostgreSQL - Amazon Aurora

Identificar e resolver bloqueadores de limpeza agressivos no Aurora PostgreSQL

No PostgreSQL, a limpeza é vital para garantir a integridade do banco de dados, pois recupera o armazenamento e evita problemas de conclusão do ID da transação. No entanto, há momentos em que a limpeza pode ser impedida de operar conforme desejado, o que pode resultar em degradação do desempenho e sobrecarga do armazenamento e até mesmo afetar a disponibilidade da instância de banco de dados pelo wraparound de ID de transação. Portanto, identificar e resolver esses problemas é essencial para o desempenho e a disponibilidade ideais do banco de dados. Leia Understanding autovacuum in Amazon RDS for PostgreSQL environments para saber mais sobre o autovacuum.

A função postgres_get_av_diag() ajuda a identificar problemas que impedem ou atrasam o progresso da limpeza agressiva. São fornecidas sugestões, que podem incluir comandos para resolver o problema onde ele é identificável ou orientações para diagnósticos adicionais quando o problema não é identificável. Bloqueadores de limpeza agressiva são relatados quando a idade excede o limite de autovacuum adaptativo do RDS de 500 milhões de IDs de transação.

Qual é a idade do ID da transação?

A função age() para IDs de transação calcula o número de transações que ocorreram desde o ID de transação não congelado mais antigo de um banco de dados (pg_database.datfrozenxid) ou tabela (pg_class.relfrozenxid). Esse valor indica a atividade do banco de dados desde a última operação de limpeza agressiva e destaca a provável workload para os próximos processos de VACUUM.

O que é uma limpeza agressiva?

Uma operação VACUUM agressiva conduz uma varredura abrangente de todas as páginas em uma tabela, incluindo aquelas normalmente ignoradas durante operações VACUUM regulares. Essa verificação completa visa "congelar" os IDs de transação que se aproximam de sua idade máxima, evitando efetivamente uma situação conhecida como conclusão de ID de transação.

Para que postgres_get_av_diag() reporte bloqueadores, o bloqueador deve ter pelo menos 500 milhões de transações de idade.