Memória: shared_buffers, effective_cache_size e work_mem
O shared_buffers é configurado como 25% da RAM total, conforme recomendado pela documentação oficial do PostgreSQL. Valores maiores podem causar contenção com o cache do sistema operacional. O effective_cache_size (75% da RAM) orienta o query planner sobre quanta memória está disponível para cache, influenciando a escolha entre index scan e sequential scan.
O work_mem é calculado dividindo a memória restante pelo número de conexões multiplicado por um fator de segurança (3x para OLTP, 1.5x para Data Warehouse), evitando que operações simultâneas de sort e hash consumam toda a RAM.
Disco: random_page_cost e effective_io_concurrency
Em servidores com SSD ou NVMe, o random_page_cost cai de 4.0 para 1.1 porque leituras aleatórias são quase tão rápidas quanto sequenciais. Isso faz o planner preferir index scans. O effective_io_concurrency sobe para 200 em SSDs, permitindo ao PostgreSQL disparar múltiplas leituras em paralelo.
Conexões e paralelismo
Aplicações Web/OLTP tipicamente precisam de mais conexões (200) com menos work_mem por conexão, enquanto Data Warehouses usam menos conexões (40) com mais memória por query. O número de parallel workers é calculado com base nos CPUs disponíveis, limitado a 8 workers conforme a prática recomendada.