A configuração shared_buffers de 24MB é o padrão conservador, eu diria que ela precisa ser bem maior para um banco de dados dedicado com 16GB de RAM disponível. Mas sim, você terá que reiniciar o servidor para redimensioná-lo. O link é um bom ponto de partida para diretrizes de configuração de desempenho. Definir os shared_buffers como 4GB ou 6GB parece mais razoável.
Note que no linux você precisa ajustar a configuração do sysctl kernel.shmmax (em /etc/sysctl.conf ou apenas escrevendo / proc / sys / kernel / shmmax) para alocar um bloco dessa quantidade de memória compartilhada. Se você não fizer, você receberá um erro especificando o quanto foi solicitado, você tem que definir o kernel.shmmax maior que isso.
Como você tem muita memória, você também pode considerar a configuração do padrão work_mem mais alto, o que fará coisas como classificações e hashes (grupo / ordem / distintas, etc.) tenderem a funcionar na memória em vez de usar arquivos temporários. Você não precisa reiniciar o servidor para fazer isso, basta atualizar o arquivo de configuração, recarregar o serviço e as sessões new receberão a nova configuração. A memória de trabalho padrão para uma sessão é de 1 MB, você pode calcular o máximo que pode ser usado em uma única vez como work_mem * max_client_connections
e estimar o impacto que terá.
Você também deve aumentar effective_cache_size para indicar ao planejador que a camada FS do kernel provavelmente armazenará muitas páginas na memória fora dos buffers compartilhados do postgresql.
Espero que isso te faça um bom começo.