Estou usando uma máquina baseada em código aberto (RHEL 6.2) executando o software SIEM. Quando executo o top
comando, vejo postgres
e postmaster
ambos com 96% de uso da CPU. Existe uma maneira de identificar ou ver o que está causando o acúmulo desses serviços?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Você pode corresponder um ID de backend específico do Postgres a um ID de processo do sistema usando a
pg_stat_activity
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ê pode investigar mais (
EXPLAIN
/EXPLAIN ANALYZE
; verificar bloqueios, etc.)Eu estava tendo o mesmo problema. O postgresql está configurado no AWS RDS e estava tendo 100% de utilização da CPU mesmo após aumentar a instância. Eu depurei com o método mostrado aqui e um dos métodos funcionou para mim.
Verifiquei a consulta em execução por mais tempo e soube que certas consultas estavam travadas 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:
Se isso for mais de uma hora, então este é 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, você provavelmente terá problemas de contenção de bloqueio, provavelmente devido a arquivos
max_connections
. Considere reduzirmax_connections
e usar um pool de conexões, se for o caso.Caso contrário: Detalhes, por favor. Saída completa de
top -b -n 1
para começar.Você pode usar https://www.postgresql.org/docs/current/pgstatstatements.html
pg_stat_statements
.Primeiro,
pg_stat_activity
(das outras respostas) é um bom conselho - e acho que às vezes não é suficiente? Ele mostra apenas a atividade atual , mas e se houver muitas consultas rápidas, que não duram o suficiente para parecerem interessantespg_stat_activity
? No entanto, quando há muitos deles, eles ainda podem causar alto uso da CPU?Então você pode usar
pg_stat_statements
:(A partir desta postagem do blog: A extensão Postgres mais útil: pg_stat_statements )
Aqui eu uso para descobrir por que meu próprio uso de CPU é inesperadamente alto:
Você notou algo, acima? — As principais consultas são rápidas: 0,009 e 0,004 segundos. Mas eles são chamados muitas e muitas vezes.
Gostaria de recomendar o
pg_activity
utilitário para ver quais consultas SQL usam CPU\RAM. Muito útil, comotop
.