Performance do Postgresql - Ajustando SHMMAX e SHMALL

8

Eu li praticamente tudo o que há online sobre como melhorar o desempenho do postgres, mas os valores "certos" para SHMMAX e SHMALL ainda me escapam.

O consenso parece ser SHMMAX = total_memory / 4 e SHMALL = total_memory / 2 são valores iniciais seguros.

No entanto, o SHMALL pode ser medido em páginas ou bytes e não consigo encontrar nenhuma informação sobre o que é usado no Ubuntu.

O Ubuntu (ou mais geralmente o Debian) usa páginas ou bytes para o SHMALL?

    
por Enrico 16.12.2011 / 17:57

2 respostas

10

Para todos os sistemas Linux que usei SHMALL é medido em páginas e SHMMAX é medido em bytes. Eu acho que você pode verificar seu sistema usando o comando ipcs , que sempre converte os parâmetros acima em KBytes enquanto a saída, e compara com sysctl valores:

[aseryozhin@centos ~]$ ipcs -l

------ Shared Memory Limits --------
max number of segments = 4096               // SHMMNI   
max seg size (kbytes) = 524288              // SHMMAX
max total shared memory (kbytes) = 8388608  // SHMALL
min seg size (bytes) = 1

[aseryozhin@centos ~]$ sysctl -e kernel.shmmax
kernel.shmmax = 536870912

[aseryozhin@centos ~]$ sysctl -e kernel.shmall
kernel.shmall = 2097152

[aseryozhin@centos ~]$ getconf PAGE_SIZE
4096

SHMMAX: 524288 * 1024 = 536870912

SHMALL: 8388608 * 1024/4096 = 2097152

    
por 18.12.2011 / 12:58
2

Estas variáveis são medidas em bytes, conforme indicado na documentação. Eu acho que é mais importante olhar para os parâmetros de configuração do postgresql. Você precisa observar os valores SHMALL / SHMMAX quando necessário. Por exemplo, se você quiser aumentar o número máximo de conexões, talvez seja necessário aumentar esses limites.

O ajuste do servidor de banco de dados depende do seu padrão de uso, como o número de conexões simultâneas e o tamanho do banco de dados. Aumentar um parâmetro de configuração nem sempre é bom.

    
por 16.12.2011 / 19:07