如何确定PostgreSQL中max_worker_processes的最优取值
PostgreSQL
max_worker_processes 配置问题解答 核心概念澄清
max_worker_processes 是PostgreSQL全局后台辅助工作进程的总数上限,计数范围包含并行查询工作进程、逻辑复制工作进程、自定义插件(如pg_cron)的后台进程等,普通客户端连接对应的后端进程不计入该参数的统计范围。
关于“取值不高于可用核心数”的结论说明
该建议是CPU密集型负载下的最优实践,并非强制通用规则。
这个建议的底层逻辑是:如果所有工作进程都在执行CPU密集运算,进程数超过物理核心数会触发频繁的CPU上下文切换,额外开销会抵消多进程带来的收益。
如果你的业务场景存在大量IO等待(如高频磁盘读写、跨节点数据交互等),可以适当调高该参数,因为IO等待期间CPU核心处于空闲状态,可调度其他进程执行,不会造成核心资源浪费。但不建议调得过高,通常最高不要超过物理核心数的2~3倍,避免进程数过多带来的调度开销反超收益。
8核容器承载100并行请求的可行性判断
默认max_worker_processes=8的配置是否可行,取决于你是否使用了需要后台工作进程的功能:
- 如果你的业务未开启并行查询,也没有使用逻辑复制、定时任务插件等需要额外后台进程的能力,默认配置完全可以支撑100个并行客户端请求,普通连接不受该参数限制。
- 如果你的业务开启了并行查询,比如
max_parallel_workers_per_gather设为4,那么同时跑2个并行查询就会占满8个工作进程配额,后续的并行查询会退化为单进程执行,性能会出现明显下降。这种场景下建议将max_worker_processes调整为16~24,匹配IO密集场景的调度需求。
调整注意事项
- 修改
max_worker_processes需要重启PostgreSQL实例才能生效 - 调整后需要同步匹配相关参数:
max_parallel_workers(全局并行查询工作进程上限)不能超过max_worker_processes的取值
内容的提问来源于stack exchange,提问作者user3714601
相关产品推荐
相关产品推荐

