Quero solucionar erros de tempo limite de declaração em consultas executadas no meu cluster de banco de dados da edição do Amazon Aurora compatível com PostgreSQL.
Resolução
Importante: o Insights de Performance chegará ao fim de sua vida útil em 30 de junho de 2026. É possível fazer o upgrade para o modo Avançado do Database Insights antes de 30 de junho de 2026. Se você não fizer o upgrade, os clusters de banco de dados que usam o Insights de Performance usarão como padrão o modo Padrão do Database Insights. Somente o modo Avançado do Database Insights oferecerá suporte a planos de execução e análises sob demanda. Se seus clusters usarem como padrão o modo Padrão, talvez você não consiga usar esses recursos no console. Para ativar o modo Avançado, consulte Ativação do modo Avançado do Database Insights para Amazon RDS e Ativação do modo Avançado do Database Insights para Amazon Aurora.
Se as consultas falharem na execução dentro do tempo especificado pelo parâmetro statement_timeout, ele cancela a consulta.**** Você recebe a seguinte mensagem de erro:
"ERROR: canceling statement due to statement timeout."
Para solucionar esse erro, realize as seguintes ações:
Verifique o parâmetro statement_timeout configurado
Para verificar o parâmetro de statement_timeout no grupo de parâmetros do cluster de banco de dados ou no grupo de parâmetros do banco de dados, execute a seguinte consulta SELECT:
SELECT name, setting, unit, context, source FROM pg_settings WHERE name = 'statement_timeout';
Saída esperada:
name | setting | unit | context | source
-------------------+---------+------+---------+--------------------
statement_timeout | 5000 | ms | user | configuration file
Observação: no exemplo de saída, o parâmetro statement_timeout tem um valor de 5.000 milissegundos. O campo "origem" mostra "arquivo de configuração", que indica que o parâmetro está definido no nível do grupo de parâmetros do cluster.
Em seguida, verifique o parâmetro statement_timeout no nível do perfil e no nível do banco de dados.
Para verificar as configurações em nível de perfil em todos os perfis no cluster de banco de dados, execute a seguinte consulta:
SELECT r.rolname, d.datname, s.setconfig
FROM pg_db_role_setting s
JOIN pg_roles r ON r.oid = s.setrole
LEFT JOIN pg_database d ON d.oid = s.setdatabase
WHERE s.setconfig::text LIKE '%statement_timeout%'
ORDER BY r.rolname;
Para verificar as configurações em nível de banco de dados em todos os bancos de dados no cluster, execute a seguinte consulta:
SELECT d.datname, rs.setconfig
FROM pg_db_role_setting rs
JOIN pg_database d ON d.oid = rs.setdatabase
WHERE rs.setrole = 0;
Examine a saída para identificar qualquer configuração de statement_timeout definida no nível do perfil ou do banco de dados que possa substituir a configuração no nível do cluster.
Observação: os parâmetros Statement_timeout que você define com ALTER ROLE SET não herdam os perfis secundários. Se você configurar o parâmetro statement_timeout em um perfil, só será possível usar o parâmetro ao fazer login nesse perfil. Para obter mais informações, consulte ALTER ROLE no site do PostgreSQL.
Identifique as consultas SQL canceladas
Visualize o arquivo de log de erros do PostgreSQL e, em seguida, verifique se o parâmetro log_min_error_statement está definido como ERROR ou com menor severidade. Depois de identificar a declaração que falhou, localize o SQL e os nomes das tabelas que falharam. Para obter mais informações, consulte Noções básicas sobre o parâmetro log_line_prefix.
Identifique a causa da longa duração da execução das consultas
Se você encontrar a consulta SQL que falhou, use o CloudWatch Database Insights para identificar transações bloqueadas.
Para usar o CloudWatch Database Insights para analisar o desempenho, conclua as seguintes etapas:
- Abra o console do Amazon Relational Database Service (Amazon RDS).
- No painel de navegação, clique em Bancos de dados.
- Selecione seu cluster de banco de dados do Aurora PostgreSQL.
- Clique na guia Monitoramento.
- Selecione Exibir detalhes em Insights de Performance.
- Analise a carga do banco de dados. É possível agrupar a carga do banco de dados por eventos de espera, consultas SQL, hosts ou usuários para identificar transações bloqueadas.
Se o problema se reproduzir de forma consistente, configure o parâmetro log_min_duration_statement em sua instância de banco de dados e use o módulo auto_explain. Para obter mais informações, consulte How can I log execution plans of queries for Amazon RDS PostgreSQL or Aurora PostgreSQL to tune query performance? (Como posso registrar em log planos de execução de consultas no Amazon RDS PostgreSQL ou Aurora PostgreSQL para ajustar o desempenho da consulta?)
Também é possível usar os comandos EXPLAIN e EXPLAIN ANALYZE para obter o plano de execução de consulta. Para obter mais informações, consulte Como identifico e soluciono problemas de desempenho e consultas de execução lenta em minha instância de banco de dados do Amazon RDS para PostgreSQL ou compatível do Aurora PostgreSQL?
Verifique se há linhas mortas nas tabelas de origem
Linhas ou tuplas mortas podem aumentar o tempo de SELECT. Para verificar um grande número de linhas mortas nas tabelas de origem, execute a seguinte consulta:
SELECT * FROM pg_stat_user_tables WHERE relname = 'table_name';
Observação: substitua table_name pelo nome da tabela de origem.
Informações relacionadas
How do I end long-running queries in my Amazon RDS for PostrgreSQL or Aurora PostgreSQL-Compatible DB instance? (Como faço para encerrar consultas de longa duração em minha instância de banco de dados do Amazon RDS para PostgreSQL ou compatível com o PostgreSQL do Aurora?)
Como identifico o que bloqueou uma consulta na minha instância de banco de dados do Amazon RDS PostgreSQL ou do Aurora PostgreSQL?