Introdução
Para melhorar o desempenho e evitar travamentos no PostgreSQL, há diversos parâmetros que podem ser ajustados no arquivo de configuração postgresql.conf. Aqui estão alguns dos principais:
postgresql.conf
está localizado no diretório “C:\Program Files\PostgreSQL\12\data”. Já em ambientes Linux, o mesmo está localizado em “/etc/postgresql/12/main/”. Algumas das sugestões abaixo devem ser aplicadas baseando-se na quantidade total de memória RAM disponível no servidor, ou seja, o preenchimento dos parâmetros pode variar de caso para caso. Em caso de dúvidas, consulte seu departamento de TI.
shared_buffers
Define a quantidade de memória dedicada aos buffers compartilhados. Um bom ponto de partida é definir entre 25% a 40% da memória RAM total.
Exemplo: shared_buffers = 4GB
work_mem
Define a quantidade de memória alocada para operações de ordenação e junções (sorts e joins). Se esse valor for muito baixo, operações complexas podem usar swap, impactando o desempenho.
Exemplo: work_mem = 64MB (ajuste conforme as necessidades das consultas)
maintenance_work_mem
Usado para operações de manutenção, como VACUUM e CREATE INDEX. Pode ser configurado maior, especialmente em servidores dedicados a manutenção.
Exemplo: maintenance_work_mem = 512MB
effective_cache_size
Estimativa de quanta memória do sistema operacional está disponível para cache de disco, afetando o planejamento de execução de consultas. Normalmente, configura-se em torno de 50% a 75% da memória RAM total.
Exemplo: effective_cache_size = 12GB
max_connections
Defina conforme a carga de trabalho esperada. Um número muito alto de conexões pode sobrecarregar os recursos do sistema.
Exemplo: max_connections = 200
checkpoint_segments / checkpoint_timeout
Os checkpoints muito frequentes podem causar travamentos temporários. Aumentar o número de segmentos de checkpoints ou o tempo entre eles pode ajudar.
Exemplo: checkpoint_timeout = 15min e checkpoint_completion_target = 0.9
wal_buffers
Memória usada para escrever no log de transações (WAL). Para cargas de escrita intensa, aumentar esse valor pode ajudar.
Exemplo: wal_buffers = 16MB
autovacuum
Ajustar o autovacuum para ser mais agressivo em tabelas grandes pode prevenir inchaço (bloat) e manter o desempenho.
Exemplo: autovacuum_naptime = 10s e autovacuum_vacuum_scale_factor = 0.1
random_page_cost
Custo estimado para leitura aleatória de uma página no disco. Ajustar esse valor para refletir o desempenho do seu armazenamento pode melhorar a execução de consultas.
Em SSDs, pode ser algo como random_page_cost = 1.1.
log_min_duration_statement
Para identificar consultas lentas, você pode logar todas as consultas que excedam um determinado tempo.
Exemplo: log_min_duration_statement = 500ms