Eu li vários artigos (incluindo documentos do Postgres) que sugerem definir o valor de configuração do shared_buffer para 25% de sua memória física total.
Usando minha memória de 4 GB como exemplo ... Se bem entendi, quando o postgres é iniciado, ele solicita ~ 1 GB de memória física do sistema operacional. Ele usará isso para fins de buffer. Assim, quando olho para um utilitário como "top", vejo que o tamanho/RES do processo postgres é de aproximadamente 1 GB.
Portanto, minha pergunta é: o que acontece quando tenho conexões POOLED com o Postgres? ou seja, um servidor Tomcat que mantém N número de conexões abertas e ociosas para postgres? Posso ver que há um número N de processos postgress aguardando em segundo plano por solicitações do Tomcat. Cada processo tem o mesmo tamanho (~1Gb). Eles são garfos do processo original, suponho. Isso significa que o Postgres como um todo está ocupando N * 1 GB de memória? Não é uma coisa ruim tornar o shared_buffer tão grande?
Não, ainda é apenas 1 GB de memória total.
O buffer é alocado como memória compartilhada e alocado apenas uma vez, mas compartilhado entre todos os processos do servidor.
É basicamente um "erro" na exibição de memória do comando top, que simplesmente informa a memória compartilhada (que existe apenas uma vez) para cada processo.