Memnemonics fike’s Rotating Header Image

April, 2007:

3000 conexões simultâneas no PostgreSQL, como assim?

     Não, não vou comentar sobre o filme 300, apesar de estar ansioso para assitir. :)
   
     Essa semana tive que configurar um servidor com PostgreSQL 8.2 para 3000 conexões e algo deste  tipo é necessário mexer na memória compartilhada (inglês é shared memory)do kernel linux e também na quantidade de semáforos que podem ser abertos. Cada conexão tem um custo de 400 bytes da memória compartilhada, no caso das  3 mil conexões o cálculo é "3000 X 400 = ~ 1Mbyte ".  Ao calcular o uso total de memória compartilhada no kernel você precisa somar o consumo dos processos do PostgreSQL que é configurado pelo parâmetro shared_buffers do arquivo postgresql.conf. Sobre memória compartilhada vale pena o texto do Dicas-L sobre semáforos e kernel.

      Geralmente alterar a memória compartilhada é senso comum para um DBA PostgreSQL mas alterar os semáforos não.  Um outro post eu comento sobre isso. ;)
 
      Supondo que esteja configurado para 128Mbytes o shared_buffers, deve se acrescentar mais 1Mbyte para as 3 mil conexões. Para o kernel linux aceitar essas configurações do PostgreSQL é necessário mexer no diretório /proc para alterar a memória compartilhada e a quantidade de semáforos.  No meu caso tive que alterar e usei a linha abaixo.

#echo "250 32000 100 256" > /proc/sys/kernel/sem

     Na documentação do PostgreSQL tem uma parte específica sobre tuning em kernel. :)