Tenho visto muitos blogs de ajuste de desempenho do PostgreSQL e empresas como a EDB sugerindo colocar a configuração max_worker_processes do PostgreSQL para o número de CPUs na máquina.
Estamos usando uma VM PostgreSQL 13 dedicada na nuvem com 16 vCPUs . Mas a configuração padrão do Postgres max_worker_processes=8 . Baseia-se no valor padrão O que eu estava pensando O Postgres irá apenas até 8 vCPUs no máximo e o uso máximo esperado da CPU está em torno de 50% até alguns dias atrás, tivemos algum pico de conexão que na verdade estava ligado à sobrecarga de E/S, mas a CPU atingiu 95 -99% durante o pico.
Então, como max_worker_processes está relacionado à CPU? Isso terá algum impacto se eu deixar o valor padrão de 8? Ou existem outras maneiras de encontrar um valor ideal?
Eu acho que você entendeu mal
max_worker_processes
. Este parâmetro não limita o número de processos de back- end do PostgreSQL (os processos do servidor que pertencem a uma sessão de banco de dados), mas o número de processos de trabalho em segundo plano personalizados (por exemplo, processos de trabalho paralelos adicionais) .Se você não usar extensões do PostgreSQL que criam processos de trabalho em segundo plano adicionais (como
pg_prewarm
oupg_timetable
), não adianta aumentarmax_worker_processes
se você também não aumentarmax_parallel_workers
o limite para processos de trabalho paralelos.Definir esses parâmetros tão altos quanto o número de núcleos de CPU é adequado se sua carga de trabalho estiver vinculada a E/S ou se você tiver um data warehouse que esteja executando uma única consulta por vez. Com uma carga de trabalho vinculada à CPU, eu definiria esses parâmetros mais baixos, para que você não corra o risco de sobrecarregar sua CPU com processos de trabalho paralelos. Defina os parâmetros altos para otimizar o tempo de resposta e defina-os como baixos para otimizar o rendimento, pois as consultas paralelas usam mais recursos do que as de thread único.