gerenciando alta carga de um banco de dados postgresql

3

Parece que estou tendo um problema pelo qual um servidor executando o postgresql está tendo uma carga bastante alta, com a média acima de 30.

Este servidor está sendo executado como vm no vmware.

O que eu estou querendo saber é qual é a melhor maneira de configurar o postgresql para que ele não sobrecarregue a caixa.

Se eu tivesse que lançar mais recursos na VM, isso resolveria o problema ou apenas engoliria isso também? É apenas a CPU que está sendo martelada, a memória (2GB) é suficiente.

    
por Matt Delves 01.03.2010 / 00:27

3 respostas

1

Verifique se suas tabelas foram limpas corretamente. O alto uso da CPU em uma instância postgres é geralmente um sinal de que há um grande número de linhas excluídas na tabela.

Se você estiver usando o vácuo automático, verifique as estatísticas da tabela para verificar se ele está realmente em execução

    
por 01.03.2010 / 01:14
3

'Carga alta' provavelmente mede muitas consultas em paralelo. Tente executar a seguinte consulta:

SELECT * FROM pg_stat_activity;

Isso mostrará o que o servidor está fazendo no momento. Talvez você possa ver algo suspeito aqui? Uma consulta que não deve ser chamada com frequência?

Além disso, para depurar problemas de desempenho, é muito útil definir a opção log_min_duration_statement no postgresql.conf. Isso mostrará as consultas que levam muito tempo para serem executadas. Estes são provavelmente aqueles que causam mais carga. Geralmente, é preciso otimizar uma única consulta com falha (reescrevendo-a, adicionando índices ou ajustando a configuração do PostgreSQL) para reduzir muito a carga do servidor.

    
por 01.03.2010 / 10:01
1

Não posso fornecer um arquivo de configuração, pois a maioria das configurações depende do ambiente e a "carga alta" não é exatamente um tipo de problema. Mas aqui estão algumas dicas sobre como rastrear problemas de desempenho com o PGSQL.

Bem, primeiro de tudo você terá que verificar o que seu banco de dados está realmente fazendo. Normalmente, quando você executa o DB, você tem algumas consultas pesadas que são executadas com frequência. Verifique quais consultas você executa e, em seguida, use EXPLAIN ANALYZE para ter uma ideia do custo de cada consulta.

Em seguida, você começa a examinar qual é realmente o problema. Uma consulta mal escrita pode matar o desempenho, mas se as consultas parecerem boas (e não puderem ser otimizadas), você terá que ver se pode facilitar para o DB de outras maneiras.

Verifique sua saída EXPLAIN para verificações sequenciais, especialmente se você estiver fazendo isso em tabelas maiores e em várias etapas. Verifique se você pode introduzir índices que ajudarão nas suas consultas. EXPLAIN é a ferramenta geral de acompanhamento de desempenho para consultas.

Não se esqueça de VACUM e ANALISE seu banco de dados. Muitas distribuições desabilitam o serviço de autovacum, e então você tem que fazer o vacum / analisar manualmente. Eles também podem desativar a contabilidade, o que torna o processo de análise muito menos eficiente. Depois de fazer isso, volte e explique novamente para ver se as consultas são executadas de forma diferente.

Se nada mais ajudar você terá que reconstruir sua estrutura de banco de dados ou começar a distribuí-la, mas minha experiência é que você não precisará fazer isso, a menos que você execute um site com carga de DB muito pesada ou milhares de usuários simultâneos. Geralmente, são as consultas que o banco de dados não consegue recuperar de maneira ideal.

Por fim, verifique o link para obter mais dicas.

    
por 01.03.2010 / 08:59