> 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
