欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PostgreSQL并行计算

程序员文章站 2022-07-12 19:53:30
...

PostgreSQL从9.6开始支持并行计算,到现在的pg12已经较为成熟,能够支持很多场合的,目前大约已支持几十种场景的并行计算。
不过大部分情况下很多查询使用并行并不能带来性能的提升,甚至会更差,因为优化器计算成本时更多的并行意味着更大的cpu run cost,如果非并行计算的执行计划成本低于并行计算的成本,则不使用并行计算。所以一般只有那些访问大量数据但只返回其中少数行的查询最能从并行查询中获益。
想要使用并行计算,首先得配置相关参数:

  • max_parallel_workers_per_gather 必须被设置为大于零的值
  • dynamic_shared_memory_type必须被设置为除none之外的值。

除此之外,还有很多并行计算相关的参数,下面简单介绍:

优化器并行计算的并行度计算方法
–总work进程数

bill=# show max_worker_processes;
 max_worker_processes 
----------------------
 8
(1 row)

–所有会话同一时刻,并行计算最大允许开启的WORKER数

bill=# show max_parallel_workers;
 max_parallel_workers 
----------------------
 8
(1 row)

–单条查询,每个节点最多允许开启的WORKER数

bill=# show max_parallel_workers_per_gather;
 max_parallel_workers_per_gather 
---------------------------------
 2
(1 row)

–表并行度参数,默认不设置,从表大小计算

bill=# alter table test set (parallel_workers =32);    
ALTER TABLE  

–真实并行度计算

min (max_worker_processes - 已运行workers ,     
     max_parallel_workers - 其他会话当前真实启用的并行度 ,      
     Min(parallel_workers(表级设置,没有设置则,根据表大小计算得到),         max_parallel_workers_per_gather
)    

强制选择并行计算参数

bill=# set force_parallel_mode =on;
SET

例子:

bill=# explain select count(*) from test;
                                      QUERY PLAN                                       
---------------------------------------------------------------------------------------
 Finalize Aggregate  (cost=11614.55..11614.56 rows=1 width=8)
   ->  Gather  (cost=11614.33..11614.54 rows=2 width=8)
         Workers Planned: 2
         ->  Partial Aggregate  (cost=10614.33..10614.34 rows=1 width=8)
               ->  Parallel Seq Scan on test  (cost=0.00..9572.67 rows=416667 width=0)
(5 rows)