Ajustar o Aurora PostgreSQL com insights proativos do Amazon DevOps Guru - Amazon Aurora

Ajustar o Aurora PostgreSQL com insights proativos do Amazon DevOps Guru

Os insights proativos do DevOps Guru detectam condições em clusters de banco de dados do Aurora PostgreSQL que podem causar problemas, permitindo que você as conheça antes que ocorram. Os insights proativos podem alertar quando ocorre um período longo de inatividade na conexão da transação. Para ter mais informações sobre como solucionar períodos longos de inatividade nas conexões das transações, consulte O banco de dados está inativo há muito tempo na conexão da transação.

O DevOps Guru pode fazer o seguinte:

  • Evitar muitos problemas comuns de bancos de dados ao comparar a configuração do seu banco de dados com as configurações comuns recomendadas.

  • Alertar sobre problemas críticos em sua frota que, se não forem controlados, poderão causar problemas maiores no futuro.

  • Alertar sobre problemas recém-descobertos.

Cada insight proativo contém uma análise da causa do problema e recomendações de ações corretivas.

Para ter informações sobre o Amazon DevOps Guru para Amazon RDS, consulte Analisar anomalias de desempenho do Aurora com o Amazon DevOps Guru para Amazon RDS.

O banco de dados está inativo há muito tempo na conexão da transação

A conexão com o banco de dados está no estado idle in transaction há mais de 1.800 segundos.

Versões compatíveis do mecanismo

Essas informações de insights são compatíveis com todas as versões do Aurora PostgreSQL.

Contexto

Uma transação no estado idle in transaction pode conter bloqueios que impedem outras consultas. Também pode impedir que VACUUM (incluindo o autovacuum) limpe linhas mortas, causando inchaço no índice ou na tabela ou recorrência de IDs de transação.

Causas prováveis desse problema

Uma transação iniciada em uma sessão interativa com BEGIN ou START TRANSACTION não terminou usando um comando COMMIT, ROLLBACK ou END. Isso faz com que a transação passe para o estado idle in transaction.

Ações

Você pode encontrar transações inativas consultando pg_stat_activity.

Em seu cliente SQL, execute a seguinte consulta para listar todas as conexões em estado idle in transaction e ordená-las por duração:

SELECT now() - state_change as idle_in_transaction_duration, now() - xact_start as xact_duration,* FROM pg_stat_activity WHERE state = 'idle in transaction' AND xact_start is not null ORDER BY 1 DESC;

Recomendamos ações distintas dependendo dos motivos do insight.

Encerrar transação

Quando você inicia uma transação em uma sessão interativa com BEGIN ou START TRANSACTION, ela passa para o estado idle in transaction. Ela permanecerá nesse estado até você encerrar a transação emitindo um comando COMMIT, ROLLBACK ou END, ou até desfazer completamente a conexão para reverter a transação.

Encerrar a conexão

Encerre a conexão com uma transação inativa usando a seguinte consulta:

SELECT pg_terminate_backend(pid);

pid é o ID de processo da conexão.

Configurar o parâmetro idle_in_transaction_session_timeout

Configure o parâmetro idle_in_transaction_session_timeout no grupo de parâmetros. A vantagem de configurar esse parâmetro é que ele não requer uma intervenção manual para encerrar transações que estão inativas há muito tempo. Para obter mais informações sobre esse parâmetro, consulte a documentação do PostgreSQL.

A mensagem a seguir será relatada no arquivo de log do PostgreSQL depois do encerramento da conexão quando uma conexão permanecer no estado idle_in_transaction por mais tempo do que o tempo especificado.

FATAL: terminating connection due to idle in transaction timeout
Verificar o status de AUTOCOMMIT

A opção AUTOCOMMIT está ativada por padrão. Se for acidentalmente desativada no cliente, ative-a novamente.

  • No cliente psql, execute o seguinte comando:

    postgres=> \set AUTOCOMMIT on
  • Em pgadmin, ative-a escolhendo a opção AUTOCOMMIT na seta para baixo.

    Em pgadmin, escolha AUTOCOMMIT para ativá-la.
Verificar a lógica da transação no código da aplicação

Investigue a lógica da aplicação em busca de possíveis problemas. Considere as ações a seguir:

  • Verifique se a confirmação automática do JDBC está definida como true na aplicação. Além disso, considere usar comandos COMMIT explícitos em seu código.

  • Verifique sua lógica de tratamento de erros para ver se ela fecha uma transação depois de um erro.

  • Verifique se a aplicação está demorando para processar as linhas retornadas por uma consulta enquanto a transação está aberta. Nesse caso, considere programa a aplicação para fechar a transação antes de processar as linhas.

  • Verifique se uma transação contém muitas operações de longa duração. Em caso afirmativo, divida uma única transação em várias transações.

Métricas relevantes

As seguintes métricas de PI estão relacionadas a esse insight:

  • idle_in_transaction_count: número de sessões no estado idle in transaction.

  • idle_in_transaction_max_time: a duração da transação que passou mais tempo no estado idle in transaction.