Processos Postgres rodando indefinidamente e0s barras e mau desempenho após reinstalae7e3o/restaurae7e3o

No intuito de atualizar nosso Fórum, fiz uma nova instalação de VPS + Restauração no fim de semana.

Isso resolveria vários problemas para nós:

  • Renovar o Ubuntu desatualizado
  • Atualizar o Discourse
  • Atualizar para o Postgres 15

Embora, em geral, as coisas tenham corrido bem, notei problemas depois com processos do Postgres enlouquecendo, usando 100% de um núcleo. Números variados de processos, no entanto. Tentei algumas coisas, desde uma reconstrução até reinicializações. Atualmente, estou tentando um rake db:validate_indexes, que já está rodando há algumas horas sem nenhum feedback. Não tenho certeza se já fiz isso antes e se deveria acontecer mais rápido.

Usar o fórum funciona bem basicamente, mas definitivamente ficou mais lento. Algumas tarefas de execução mais longa, como carregar perfis de usuários mais ativos, levam notavelmente mais tempo do que o normal.

Tenho quase certeza de que há alguns problemas com o banco de dados, mas estou tendo dificuldades para descobrir quais são.

Tenho que dizer que nosso banco de dados é bem grande - estamos com cerca de 150 GB após a restauração e após a criação de índices. Monitorando o processo de restauração, não vi nenhum erro e a criação de índices correu bem aos meus olhos.

Alguma ideia de como lidar com isso? São 3 processos do postgres no momento - eram 6 antes de uma reinicialização que fiz há algumas horas - já vi todos os 16 núcleos sendo usados após a restauração também.

EDIT: Acabei de notar agora que 3 processos do sidekiq estão ocupados com “indexando categorias para busca”. Pode ser tudo isso apenas a reconstrução do índice de busca? Se for, isso pode ser resolvido de outra forma? Quando fizermos a restauração do sistema em produção, isso será um grande problema se degradar o desempenho por várias horas ou até dias.

No momento, apenas uma tarefa sidekiq está em execução com "Jobs::BackfillBadge", mas ainda assim 7 processos postgres estão aparentemente bloqueando 100% da CPU constantemente. Estou realmente curioso para saber o que está acontecendo lá.

Após tais movimentações, é uma boa ideia executar um vacuum para as estatísticas do banco de dados.

1 curtida

Quanto de RAM e CPU você tem?

Quanto de memória você dá ao postgres?

Esse servidor de teste está com 32 GB, 16 núcleos, a configuração está definida para 64 MB de work_mem.

EDIT: Os shared buffers estão em 8 GB

Atualmente estou executando um vacuum que parece estar travado

Não tenho certeza se está fazendo algo, mas já está assim há mais de 30 minutos.

Coloquei o fórum em modo somente leitura e reiniciei a VM para encerrar os 7 processos do Postgres que estavam “travados” lá antes. Logo após a reinicialização, 2 desses processos do postgres voltaram e não mudaram. Nada rodando no sidekiq no momento.

Você realmente não quer executar um VACUUM completo. Tudo o que você precisa para recuperar o desempenho é um VACUUM VERBOSE ANALYZE. Você não pode executar um FULL em um site em execução.

1 curtida

Não sou especialista em bancos de dados enormes, mas eu faria os buffers duas ou três vezes maiores.

Tenho certeza que você tem índices de 8 GB.

:thinking: O Postgres recomenda nunca definir shared_buffers acima de 40% da memória interna?

Dito isso,

Seu servidor pode estar subdimensionado.

2 curtidas

Aha! Um conselho sensato de um especialista! Então talvez eu estivesse certo que 8GB/25% não é suficiente, e embora 16GB seja mais de 40%, ainda pode ser uma boa sugestão porque . . . .

1 curtida

Pessoal. como dito, este é um servidor de teste - não há tráfego nele. Este servidor definitivamente não é bom o suficiente para uso em produção, mas esse não é o problema aqui. A questão é por que vemos processos do postgres travados assim (com 100% de uso de CPU) e desacelerando drasticamente as coisas. Estávamos executando o servidor de teste com capacidade menor até alguns dias atrás - ele só foi ampliado devido à falta de espaço em disco para uma restauração.

A máquina de produção está rodando com 128 GB de RAM com as mesmas configurações de Shared buffer sem nenhum problema - então não acho que haja um problema geral com essas configurações e o tamanho do Shared buffer - especialmente não em uma máquina de teste privada sem tráfego.

Mas de qualquer forma - vou refazer a restauração e ver se algo pode ter dado errado, pois aparentemente não há uma boa explicação para o comportamento.