Como você verificaria se sua instância de banco de dados postgresql precisa de mais memória RAM para manipular seus dados de trabalho atuais?
database
performance
postgresql
memory
SDReyes
fonte
fonte
Respostas:
Se você estiver no Linux, sua RAM física total deverá ser maior que o tamanho do banco de dados em disco para minimizar a E / S. Eventualmente, todo o banco de dados estará no cache de leitura do SO e a E / S será limitada a confirmar as alterações no disco. Eu prefiro encontrar o tamanho do banco de dados executando "du -shc $ PGDATA / base" - esse método agrega todos os bancos de dados em um único número. Contanto que você seja maior que isso, tudo ficará bem.
Além disso, você pode observar a taxa de acertos do cache de buscas de heap e bloco de índice. Eles medem a taxa de acertos nos buffers compartilhados do PostgreSQL. Os números podem ser um pouco enganadores - mesmo que tenha sido um erro no cache de buffers compartilhados, ainda pode ser um acerto no cache de leitura do SO. Ainda assim, os hits nos buffers compartilhados ainda são mais baratos que os hits no cache de leitura do SO (que, por sua vez, são menos caros em algumas ordens de magnitude do que ter que voltar ao disco).
Para examinar a taxa de acertos dos buffers compartilhados, eu uso esta consulta:
Isso fornece os 25 piores criminosos em que o cache do buffer está ausente para todas as tabelas em que pelo menos um bloco precisou ser buscado no "disco" (novamente, que poderia ser o cache de leitura do SO ou a E / S do disco). Você pode aumentar o valor na cláusula WHERE ou adicionar outra condição para heap_blks_hit para filtrar as tabelas raramente usadas.
A mesma consulta básica pode ser usada para verificar a taxa de acertos do índice total por tabela, substituindo globalmente a cadeia "heap" por "idx". Dê uma olhada em pg_statio_user_indexes para obter uma análise por índice.
Uma observação rápida sobre buffers compartilhados: uma boa regra geral para isso no Linux é definir o parâmetro de configuração shared_buffers como 1/4 da RAM, mas não mais que 8 GB. Esta não é uma regra rígida, mas sim um bom ponto de partida para ajustar um servidor. Se o seu banco de dados tiver apenas 4 GB e você tiver um servidor de 32 GB, 8 GB de buffers compartilhados serão realmente um exagero e você poderá configurá-lo para 5 ou 6 GB e ainda ter espaço para crescimento futuro.
fonte
Eu fiz este SQL para mostrar a tabela vs taxa de acertos do disco:
fonte
Também funciona, como dito no documento Heroku:
fonte