> Eu pretendo dividir e isolar a memória em duas partes, conceito
> conhecido como Buffer Pool em alguns outros SGBDs. Assim eu evitaria
> que a modificação dos dados da tabela C recicle o espaço de memória
> usado pelos registros da tabela A e B, pois nestas estão cadastros que
> são consultados frequentemente e o tempo de resposta requerido deve
> ser baixo.
>
> Existiria algo próximo a isso? Qual seria a melhor abordagem para que
> o cache seja mantido e reciclado ao mínimo?

No PostgreSQL padrão isso não é possível. Um algoritmo de LRU é 
utilizado para todo o cache e a estratégia é retirar do cache tudo 
aquilo que foi utilizado há mais tempo.

Você tem poucas opções:
1) Separar suas tabelas em vários clusters (instâncias) PostgreSQL.
- vantagem: você pode dimensionar o cache (shared_buffers) para cada um 
deles;
- desvantagem: não haverá integridade referencial entre as tabelas.

2) Fazer um cache grande o suficiente para que todas as tabelas caibam 
na memória.
- vantagem: não vejo muita.
- desvantagem: cache muito grande costuma causar piora de desempenho no 
PostgreSQL, justamente por causa do algoritmo que verifica o que deve 
ficar e o que deve sair da memória.

3) Desencana disso. Você precisa mesmo se preocupar com esse problema? 
100 mil registros novos por dia não representam nada em hardware 
moderno. E as outras tabelas são estáticas mesmo...

4) Procure outro SGBD que atenda sua necessidade. Mas acho que é radical 
demais. O que você precisa é desempenho? Já fez testes? O tempo de 
acesso via índices no PostgreSQL é de microssegundos, o tempo maior é 
enviar o resultado da consulta via rede. Memória não ajuda tanto assim.

5) Utilize pg_memcache para definir exatamente o que você quer que 
esteja em memória.

[]s

Flavio Henrique A. Gurgel
Consultor e Instrutor 4Linux
Tel: +55-11-2125-4747
www.4linux.com.br
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a