Imagem de fundo

O IFCE mantém um banco de dados PostgreSQL que suporta o sistema de gestão acadêmica. D...

O IFCE mantém um banco de dados PostgreSQL que suporta o sistema de gestão acadêmica. Durante um período de alta demanda (semana de matrícula), o analista de TI responsável pelo banco de dados recebeu reclamações de lentidão no sistema. Ao investigar com as views de diagnóstico do PostgreSQL, observou as seguintes situações: múltiplas sessões no estado 'idle in transaction' com duração superior a 30 minutos; uma consulta de relatório complexo com varredura sequencial (Seq Scan) em tabela de grande volume estava bloqueando transações que aguardavam locks por mais de 10 minutos; e o parâmetro idle_in_transaction_session_timeout estava com valor 0 (desabilitado). Qual conjunto de ações é mais adequado para diagnosticar, resolver o problema imediato e prevenir recorrência?


A

Reiniciar o serviço PostgreSQL para encerrar forçadamente todas as conexões ativas e liberar os locks acumulados, registrar a ocorrência no log de operações e comunicar a indisponibilidade programada aos usuários do sistema, pois o reinício é o meio mais rápido e confiável de recuperar o banco em situações de bloqueio generalizado.


B

Usar pg_stat_activity e pg_locks para identificar as transações bloqueantes, encerrar sessões ociosas com pg_terminate_backend(), otimizar a consulta problemática com EXPLAIN ANALYZE criando índices ou reescrevendo a query, e configurar idle_in_transaction_session_timeout para encerrar automaticamente transações ociosas.


C

Criar um banco de dados vazio, exportar os dados com pg_dump, importar com pg_restore e redirecionar a aplicação para o novo banco, pois a degradação durante alta demanda com Seq Scans e locks prolongados indica que o banco de dados atual acumulou fragmentação e precisa ser reconstruído.


D

Aumentar max_connections no postgresql.conf, reiniciar o serviço para aplicar a configuração e monitorar via pg_stat_activity se o número de sessões idle in transaction se reduz, pois mais conexões disponíveis permitem que as transações em fila obtenham recursos e concluam normalmente.


E

Configurar o parâmetro lock_timeout para um valor reduzido (ex.: 5000ms) no postgresql.conf e reiniciar o serviço, pois isso fará com que transações que aguardem um lock por mais de 5 segundos sejam encerradas automaticamente, liberando os recursos bloqueados para as demais sessões.