有4种配置可启用并行并进行优化,但是PostgreSQL的documentation没有说明任何有关值或计算的内容。我的问题是:
1-如何计算
max_parallel_workers
的值,max_parallel_workers_per_gather
和max_worker_processes
?2-
work_mem
可以基于连接和 内存(RAM),但如果启用work_mem
,则需要更改某些内容 平行吗?
我的假设是:如果机器有8个内核,the max_parallel_workers
是8,并且工作进程和每个收集的值是32(8 * 4),那么我从原始配置中获取的数字4是4个收集每1个并行工作。
答案 0 :(得分:1)
问题很明显,但答案却不是。
我将尝试描述的范围更广一些,因此,如果您觉得有明显的问题,请跳过它。
首先-here在此介绍了它的工作方式。 here描述了该参数的作用。换句话说,PG具有可以在后台执行某些操作的进程池。它们的最大数量受max_worker_processes
的限制。当执行表扫描时,可能要花费很长时间,因此拥有更多正在处理数据的进程将是明智的。可以通过后台工作人员在后台完成。他们可以完成的查询计划节点是:gather
,gather-merge
。
每个后台工作者都有它的内存-用于排序和其他与执行相关的事情。它们一直存在,所以最好记住这一点,以确保系统未使用交换...
除此之外。尝试找出每个查询的最佳工作程序数-默认情况下为2。因此,如果一切正常,可以使用两个后台工作程序来收集数据。下一个问题是并行执行多少个查询。我的意思是-需要进行并行处理的繁重查询。有两个数字说-每个查询4个工作人员,和10个查询-仅需要40个工作人员。您可以计算是否可以,也可以尝试一下。通过这种方式或另一种方式-还有一个参数-max_worker_processes
。拥有40名工人进行并行处理-您需要更多的工人来完成其他任务-例如复制。
听起来40合理吗?这里有两个计数器点-默认情况下PG是OLTP数据库。因此,系统为其他事情做好了准备,而这种变化可以带来良好的效果。另一方面-有一个bgwriter
,因此毕竟有一个处理I-O的过程。它依靠系统,但仍然是一个过程。
因此答案远非完美-您需要尝试,收集自己的统计信息并做出决定。
答案 1 :(得分:1)
经过一番搜索,我找到了一些答案,这可以帮助想要启用并具有基本配置的用户,如果您有4个核心(CPU):
您的最大工作进程数将是核心数量,而最大并行数量必须具有相同数量:
max_worker_processes = 4
max_parallel_workers = 4
收集更为复杂,因为可以根据您的需求和资源来操纵此值,有必要进行测试以获取最佳值,但是对于启动值,则可以使用cores / 2。
max_parallel_workers_per_gather = 2
这不是最终答案,有一些遗漏的地方...我仍在搜索和更新此答案或等待更好的答案。
答案 2 :(得分:0)