Aqui está um pequeno trecho que permite ao servidor usar até metade da RAM física para a memória compartilhada:
#!/bin/bash
page_size='getconf PAGE_SIZE'
phys_pages='getconf _PHYS_PAGES'
shmall='expr $phys_pages / 2'
shmmax='expr $shmall \* $page_size'
echo \# Maximum shared segment size in bytes
echo kernel.shmmax = $shmmax
echo \# Maximum number of shared memory segments in pages
echo kernel.shmall = $shmall
Coloque a saída disso em /etc/sysctl.conf e execute:
sysctl -p
Então você está pronto.
O PostgreSQL usa o sistema operacional para suplementar todas as suas leituras e gravações, então você realmente não quer dedicar metade da memória RAM - isso tem bastante margem para um servidor de banco de dados dedicado. Testes variando a quantidade de RAM dedicada para o servidor normalmente encontram taxa de transferência máxima em algum lugar entre 15% e 40% da RAM total; mais e você acaba com muitas páginas com buffer duplo. E o limite superior útil é de cerca de 8 GB em sistemas grandes, ponto final, devido a questões de contenção de cache ainda não resolvidas no código do servidor. Mais sobre o ajuste do servidor no wiki do PostgreSQL .