Recomendação de ajuste do PostgreSQL para grandes servidores e conjuntos de dados

3

Estou trabalhando com um servidor PostgreSQL (8.1) em uma máquina dedicada com 64 GB de RAM e um disco RAID rápido. O conjunto de dados em si é muito grande - temos várias tabelas em torno de 200 GB, mais na faixa de 50 a 100 GB, e está crescendo constantemente, com aspiradores noturnos, grandes operações sendo executadas no início da manhã e operações menores em -demanda ao longo do dia.

Temos passado por alguns problemas de desempenho ultimamente, com o vácuo não terminando a tempo antes que as grandes operações iniciem, e então isso começa a ser bloqueado pelo resto do dia. Estamos tentando ajustar nossa configuração para aproveitar nossos recursos, mas estamos tendo problemas com alguns dos parâmetros mais vagamente definidos, como work_mem. (Uma experiência foi aumentar para 512 MB com um max_connections de 150, o que acabou por causar alguns problemas.)

Quais podem ser alguns bons parâmetros de linha de base para tentar? Uma vez que colocamos a configuração em um estado estável, podemos sempre começar a experimentar mais com o ajuste fino de valores individuais, mas não temos certeza de onde nossas necessidades diferem das recomendações padrão para esse tipo de coisa.

Edit: Eu respondi isso nos comentários, mas para torná-lo oficial, estamos no processo de montar um plano de longo prazo que incluirá o particionamento, bem como algumas outras tarefas de re-arquitetura, mas agora, nós estamos tentando tirar o máximo proveito do que temos. Eu estou procurando dicas que são mais ao longo das linhas de "Um work_mem configuração de 32MB provavelmente irá atendê-lo muito bem, mas você provavelmente não verá muita melhoria passando mais de 64MB."

    
por Jon 18.05.2011 / 21:24

2 respostas

2

O PostgreSQL 8.1 é bem antigo, chegou ao seu tempo de EOL (vide Política de Suporte à Versão do PostgreSQL ). Eu acho que versões mais recentes (por exemplo, 9.0) têm melhor desempenho (especialmente melhor aspiração) e, na minha opinião, é o primeiro passo (é claro que as configurações postgresql.conf e provavelmente kernel / ulimit também são importantes).

Na documentação do PostgreSQL, existe o método particionamento descrito para esse grande (e crescente crescimento) ) tabelas. Pode ser uma solução útil.

de link

Partitioning a table is normally only worthwhile when the size of the table exceeds physical memory.

    
por 18.05.2011 / 23:20
0

Dada a grande quantidade de dados e o fato de que está crescendo constantemente, nenhum ajuste será bom o suficiente a longo prazo se você continuar usando apenas um servidor. Você deve começar a considerar mover algumas das tabelas para outros servidores e fragmentar sempre que possível (para mantê-lo escalável). Alguns deles podem até caber em um serviço de nuvem (ou seja, SimpleDB). De qualquer forma, eu não sei se sharding ou uma solução NoSQL podem atender às suas necessidades, já que eu não conheço seus dados, mas, para muitos casos, com um bom design, isso acontece. Uma solução temporária poderia ser usar alguns escravos de leitura e / ou um farm memcached, caso você tenha problemas de desempenho durante o uso diário.

    
por 18.05.2011 / 22:47