Configurando Parâmetros do Kernel para uma Instalação Postgresql

1

Eu quero ter certeza de que o Postgresql possa aproveitar toda a memória disponível para armazenamento em cache em um servidor de banco de dados dedicado. Como posso ter certeza de que as configurações de memória compartilhada do kernel estão corretas? Alguém sabe o cálculo para garantir que o shmax etc. não limite o Postgresql?

    
por kkubasik 29.07.2010 / 17:51

1 resposta

2

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 .

    
por 04.08.2010 / 07:39