Como otimizar um servidor postgreSQL para uma infra-estrutura do tipo “write once, read many”?

2

Saudações

Estou trabalhando em um software que registra entradas (e tags relacionadas) em um banco de dados PostgreSQL para armazenamento e recuperação. Nós nunca atualizamos nenhum dado depois que ele foi inserido; podemos removê-lo quando a entrada ficar muito antiga, mas isso é feito no máximo uma vez por dia. Entradas armazenadas podem ser recuperadas pelos usuários.

A inserção de novas entradas pode acontecer de forma bastante rápida e regular, portanto, o banco de dados normalmente conterá vários milhões de elementos.

As tabelas utilizadas são bem simples: uma tabela para ids, conteúdo bruto e data de inserção; e uma tabela armazenando tags e seus valores associados a um id. A pesquisa do usuário refere-se principalmente a valores de tags, portanto, os SELECTs geralmente consistem em consultas de JOIN em ids nas duas tabelas.

Para resumir:

  • 2 tabelas
  • Muitos INSERT
  • sem UPDATE
  • alguns DELETE, uma vez por dia no máximo
  • algum SELECT gerado pelo usuário com JOIN
  • conjunto de dados enorme

O que uma configuração ideal do servidor (software e hardware, presumo, por exemplo, que o RAID10 poderia ajudar) seria para o meu servidor PostgreSQL, considerando esses requisitos? Por ótimo, quero dizer um que permite que as consultas SELECT demorem razoavelmente pouco tempo.

Eu posso fornecer mais informações sobre a configuração atual (como tabelas, índices ...), se necessário.

    
por user39530 01.04.2010 / 14:59

1 resposta

1

Altere algumas configurações no postgresql.conf: Escrita: aumentar as configurações de wal Leitura: aumentar shared_buffers e definir work_mem para um valor que o planejador possa fazer sua mágica.

Existem várias configurações, você precisa verificar e testar.

O RAID 10 é ótimo para escrever, a leitura também será boa. Uma boa placa RAID com muita RAM e backup de bateria ajudará muito.

E, RAM, RAM e RAM. Você não pode ter muito.

    
por 01.04.2010 / 18:16