Explicação das mensagens de AVISO no RDS para PostgreSQL
A função postgres_get_av_diag()
fornece as seguintes mensagens de AVISO:
- Quando a idade ainda não atingiu o limite de monitoramento
-
O limite de monitoramento de
postgres_get_av_diag()
para identificar bloqueadores é de 500 milhões de transações por padrão. Sepostgres_get_av_diag()
gerar o seguinte AVISO, isso indica que a idade da transação ainda não atingiu esse limite.NOTICE:
postgres_get_av_diag()
checks for blockers that prevent aggressive vacuums only, it does so only after exceedingdvb_threshold
which is 500,000,000 and age of this PostgreSQL cluster is currently at 2. - Não conectado ao banco de dados com o ID de transação mais antigo
-
A função
postgres_get_av_diag()
fornece a saída mais precisa quando conectada ao banco de dados com a idade de ID de transação mais antiga. O banco de dados com a idade de ID de transação mais antiga informada porpostgres_get_av_diag()
será diferente de “my_database” no seu caso. Se você não estiver conectado ao banco de dados correto, o seguinte AVISO será gerado:NOTICE: You are not connected to the database with the age of oldest transaction ID. Connect to my_database database and run postgres_get_av_diag() for accurate reporting.
Conectar-se ao banco de dados com a idade de transação mais antiga é importante pelos seguintes motivos:
-
Identificação de bloqueadores de tabelas temporárias: como os metadados das tabelas temporárias são específicos de cada banco de dados, eles geralmente são encontrados no banco de dados em que foram criados. No entanto, se uma tabela temporária for o principal bloqueador e residir no banco de dados com a transação mais antiga, isso pode ser enganoso. A conexão com o banco de dados correto garante a identificação precisa do bloqueador de tabelas temporárias.
-
Diagnóstico de vacuums lentos: os metadados do índice e as informações de contagem de tabelas são específicos do banco de dados e necessários para diagnosticar problemas de vacuum lento.
-
- O banco de dados com a transação mais antiga por idade está em um banco de dados rdsadmin ou template0
-
Em alguns casos, os bancos de dados
rdsadmin
outemplate0
podem ser identificados como o banco de dados com a idade de ID de transação mais antiga. Se isso acontecer,postgres_get_av_diag()
emitirá o seguinte AVISO:NOTICE: The database with the age of oldest transaction ID is
rdsadmin
ortemplate0
, reach out to support if the reported blocker is inrdsadmin
ortemplate0
.Verifique se o bloqueador listado não é originário de nenhum desses dois bancos de dados. Se for relatado que o bloqueador está presente em
rdsadmin
outemplate0
, entre em contato com o suporte, pois esses bancos de dados não são acessíveis ao usuário e exigem intervenção.É altamente improvável que o banco de dados
rdsadmin
outemplate0
contenha um bloqueador principal. - Quando um vacuum agressivo já está em execução
-
A função
postgres_get_av_diag()
foi projetada para relatar quando um processo de vacuum agressivo está em execução, mas ela só vai acionar essa saída depois que o vacuum estiver ativo por pelo menos 1 minuto. Esse atraso intencional ajuda a reduzir as chances de falsos positivos. Ao esperar, a função garante que somente vacuums efetivos e significativos sejam relatados, levando a um monitoramento mais preciso e confiável da atividade do vacuum.A função
postgres_get_av_diag()
gera o seguinte AVISO quando detecta um ou mais vacuums agressivos em andamento.NOTICE: Your database is currently running aggressive vacuum to prevent wraparound, monitor autovacuum performance.
Conforme indicado no AVISO, continue monitorando o desempenho do vacuum. Para obter mais informações sobre o vacuum agressivo, consulte A limpeza agressiva (para evitar conclusão) está em execução
- Quando o autovacuum está desativado
-
A função
postgres_get_av_diag()
vai gerar o seguinte AVISO se o autovacuum estiver desativado na instância de banco de dados:NOTICE: Autovacuum is OFF, we strongly recommend to enable it, no restart is necessary.
O autovacuum é um recurso essencial da instância de banco de dados do RDS para PostgreSQL que garante uma operação tranquila do banco de dados. Ele remove automaticamente as versões antigas das linhas, recupera espaço de armazenamento e evita o inchaço das tabelas, ajudando a manter as tabelas e os índices eficientes para um desempenho ideal. Além disso, ele protege contra o wraparound de ID de transação, que pode interromper transações na instância do Amazon RDS. A desativação do autovacuum pode levar a quedas de longo prazo no desempenho e na estabilidade do banco de dados. Sugerimos que você o mantenha ativado sempre. Para ter mais informações, consulte Understanding autovacuum in RDS for PostgreSQL environments
. nota
O desligamento do autovacuum não impede os vacuums agressivos. Estes ainda ocorrerão quando as tabelas atingirem o limite de
autovacuum_freeze_max_age
. - O número de transações restantes é criticamente baixo
-
A função
postgres_get_av_diag()
gera o seguinte AVISO quando um vacuum wraparound é iminente. Este AVISO é emitido quando a instância do Amazon RDS está a 100 milhões de transações de possivelmente rejeitar novas transações.WARNING: Number of transactions remaining is critically low, resolve issues with autovacuum or perform manual
VACUUM FREEZE
before your instance stops accepting transactions.Sua ação imediata é necessária para evitar tempo de inatividade do banco de dados. Você deve monitorar de perto suas operações de vacuum e considerar iniciar manualmente um
VACUUM FREEZE
no banco de dados afetado para evitar falhas nas transações.