Postgresql 10-并行配置

时间:2018-10-30 08:14:46

标签: postgresql postgresql-10

有4种配置可启用并行并进行优化,但是PostgreSQL的documentation没有说明任何有关值或计算的内容。我的问题是:

  

1-如何计算max_parallel_workers的值,   max_parallel_workers_per_gathermax_worker_processes

     

2- work_mem可以基于连接和   内存(RAM),但如果启用work_mem,则需要更改某些内容   平行吗?

我的假设是:如果机器有8个内核,the max_parallel_workers是8,并且工作进程和每个收集的值是32(8 * 4),那么我从原始配置中获取的数字4是4个收集每1个并行工作。

3 个答案:

答案 0 :(得分:1)

问题很明显,但答案却不是。

我将尝试描述的范围更广一些,因此,如果您觉得有明显的问题,请跳过它。

首先-here在此介绍了它的工作方式。 here描述了该参数的作用。换句话说,PG具有可以在后台执行某些操作的进程池。它们的最大数量受max_worker_processes的限制。当执行表扫描时,可能要花费很长时间,因此拥有更多正在处理数据的进程将是明智的。可以通过后台工作人员在后台完成。他们可以完成的查询计划节点是:gathergather-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)

有一个不错的在线配置实用程序,可以帮助设置主要的postgresql.conf值。

这不是完美的方法,但是它提供了一个可能有用的起点。

https://pgtune.leopard.in.ua/#/