Estou ciente de que discos mais rápidos do que o que estou usando ajudarão, mas isso levará mais tempo para ser colocado e estou tentando usar algumas medidas de emergência para diminuir a E / S do disco. no topo está relatando o uso do DSK no vermelho quase constantemente. Isto é para o postgres 8.3.
Minha configuração shared_buffers é de 24 MB, embora o servidor tenha 16 GB de RAM que não são totalmente utilizados. Meu primeiro pensamento foi fornecer ao banco de dados o máximo de RAM possível, mas não sei como fazer isso (este é um servidor de banco de dados dedicado).
Qualquer solução que não exija reinicialização é preferível, mas aceitarei o que posso obter neste momento.
Obrigado!
linux
postgresql
hard-drive
Harel
fonte
fonte
shared_buffers
arquivo de configuração postgresql.conf. Essa alteração requer reinicialização. Além disso, pode ser necessário aumentar o valor de/proc/sys/kernel/shmmax
antes disso.Respostas:
A configuração shared_buffers de 24 MB é o padrão conservador, eu diria que precisa ser muito maior para um banco de dados dedicado com 16 GB de RAM disponível. Mas sim, você precisará reiniciar o servidor para redimensioná-lo. http://wiki.postgresql.org/wiki/Performance_Optimization é um bom lugar para começar com as diretrizes de configuração de desempenho. Definir os buffers compartilhados para 4 GB ou 6 GB parece mais razoável.
Observe que no linux você precisa ajustar a configuração kernel.shmmax sysctl (em /etc/sysctl.conf ou apenas escrevendo / proc / sys / kernel / shmmax) para alocar um bloco dessa quantidade de memória compartilhada. Caso contrário, você receberá um erro especificando quanto foi solicitado, você deve definir o kernel.shmmax mais alto que isso.
Como você tem muita memória, considere também configurar o work_mem padrão mais alto, o que fará com que tipos como hashes e hashes (grupo / ordem / distinto etc) tendam a funcionar na memória em vez de usar arquivos temporários. Você não precisa reiniciar o servidor para fazer isso, basta atualizar o arquivo de configuração, recarregar o serviço e novas sessões obterão a nova configuração. A memória de trabalho padrão para uma sessão é de 1 MB. Você pode calcular o máximo que pode ser usado ao mesmo tempo
work_mem * max_client_connections
e estimar o impacto que isso terá.Você também deve aumentar o effective_cache_size para indicar ao planejador que é provável que a camada FS do kernel esteja armazenando muitas páginas na memória fora dos buffers compartilhados do postgresql.
etc. etc. espero que você tenha um bom começo.
fonte
Remonte os discos com noatime
fonte
Além das sugestões fornecidas aqui, você também pode querer examinar suas configurações de vacum automático. Por padrão, ele será acionado após cerca de 50 atualizações e, se o seu banco de dados estiver fazendo muitas atualizações / inserções, isso poderá desencadear uma quantidade desnecessária de instruções de vácuo que gerarão muitas IO.
fonte
Veja mais aqui .
fonte
Se o diskio do postgresql for muito alto, verifique as instruções em execução, especialmente as instruções, fazendo uma "classificação no disco" e defina os índices adequados.
Basta procurar no Google por "Postgresql Performance Tuning", você encontrará dicas suficientes por onde começar.
fonte