Respostas:
Você pode associar um ID de back-end específico do Postgres a um ID de processo do pg_stat_activity
sistema usando a tabela do sistema.
SELECT pid, datname, usename, query FROM pg_stat_activity;
pode ser um bom ponto de partida.
Depois de saber quais consultas estão sendo executadas, você poderá investigar mais ( EXPLAIN
/ EXPLAIN ANALYZE
; verificar bloqueios etc.)
WHERE
cláusula, mas se você não tiver um grande número de PIDs, será fácil de pesquisar em toda a saída. O manual do Postgres possui detalhes adicionais sobre o que você pode obterpg_stat_activity
, além de outras tabelas de coletor de estatísticas (que podem ajudá-lo se o seu problema não for uma consulta do usuário).
Eu estava tendo o mesmo problema. O postgresql está configurado no AWS RDS e estava com 100% de utilização da CPU, mesmo depois de aumentar a instância. Depurei o método mostrado aqui e um dos métodos funcionou para mim.
Eu verifiquei a consulta em execução por mais tempo e soube que determinadas consultas estavam emperradas e em execução há mais de 3-4 horas. Para verificar desde quanto tempo a consulta está em execução, execute o seguinte comando:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Se isso for mais de uma hora, esse é o problema. Mate a conexão de longa duração e limite a idade máxima da conexão do lado do aplicativo.
Se este é realmente o postmaster usando toda essa CPU, é provável que você tenha problemas de contenção de bloqueio, provavelmente devido a muito alto max_connections
. Considere diminuir max_connections
e usar um pooler de conexões, se esse for o caso.
Caso contrário: detalhes, por favor. Saída total de top -b -n 1
para começar.
postgress
épostgres
e você acabou copiado à mão.