一、优化器并行计算的并行度计算方法

1、总worker进程数

postgres=# show  ;
max_worker_processes
----------------------
128
(1 row)

2、所有会话,在同一时刻的QUERY,并行计算最大允许开启的WORKER数。

max_parallel_workers

3、单条QUERY中,每个node最多允许开启的并行计算WORKER数

postgres=# show max_parallel_workers_per_gather ;
max_parallel_workers_per_gather
---------------------------------
0
(1 row)

4、单个query, node的并行度

Min(parallel_workers(表级设置,没有设置则,根据表大小计算得到), max_parallel_workers_per_gather)

5、表级并行度参数,默认不设置,从表大小计算。

postgres=# alter table pa set (parallel_workers =32);
ALTER TABLE

6、真实并行度算法

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

二、优化器是否选择并行计算

优化器是否使用并行计算,取决于CBO,选择成本最低的方法,并行计算成本估算,成本因子参数如下:

postgres=# show parallel_tuple_cost ;
parallel_tuple_cost
---------------------
0
(1 row) postgres=# show parallel_setup_cost ;
parallel_setup_cost
---------------------
0
(1 row)

如果非并行计算的执行计划成本低于并行计算的成本,则不使用并行计算。

三、优化器是否忽略并行计算

如果表扫描或索引扫描的表或索引低于设置的阈值,这个表扫描或索引扫描则不启用并行计算。

postgres=# show min_parallel_table_scan_size ;
min_parallel_table_scan_size
------------------------------
0
(1 row) postgres=# show min_parallel_index_scan_size ;
min_parallel_index_scan_size
------------------------------
0
(1 row)

四、优化器强制选择并行计算参数

#force_parallel_mode = on

五、并行计算相关参数

1、创建索引,CREATE TABLE AS,SELECT INTO 的并行度

postgres=# show max_parallel_maintenance_workers ;
max_parallel_maintenance_workers
----------------------------------
24
(1 row)

2、并行分区表JOIN

#enable_partitionwise_join = on

3、并行分区表分区聚合

#enable_partitionwise_aggregate = on

4、并行HASH计算

#enable_parallel_hash = on

5、LEADER主动获取并行WORKER的返回结果

parallel_leader_participation = on

6、并行APPEND(分区表),UNION ALL查询

#enable_parallel_append = on    

六、强行并行

强制并行度24

1、总的可开启的WORKER足够大
postgres=# show max_worker_processes ;
max_worker_processes
----------------------
128
(1 row) 2、所有会话同时执行并行计算的并行度足够大
postgres=# set max_parallel_workers=64;
SET 3、单个QUERY中并行计算NODE开启的WORKER=24
postgres=# set max_parallel_workers_per_gather =24;
SET 4、所有表和索引扫描允许并行
postgres=# set min_parallel_table_scan_size =0;
SET
postgres=# set min_parallel_index_scan_size =0;
SET 5、并行计算优化器成本设置为0
postgres=# set parallel_tuple_cost =0;
SET
postgres=# set parallel_setup_cost =0;
SET 6、设置表级并行度为24
postgres=# alter table pa set (parallel_workers =24);
ALTER TABLE 7、效果,强制24并行。
postgres=# explain (analyze) select count(*) from pa;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------
Finalize Aggregate (cost=1615.89..1615.89 rows=1 width=8) (actual time=81.711..81.711 rows=1 loops=1)
-> Gather (cost=1615.83..1615.83 rows=24 width=8) (actual time=81.572..90.278 rows=25 loops=1)
Workers Planned: 24
Workers Launched: 24
-> Partial Aggregate (cost=1615.83..1615.83 rows=1 width=8) (actual time=58.411..58.411 rows=1 loops=25)
-> Parallel Seq Scan on pa (cost=0.00..712.71 rows=416667 width=0) (actual time=0.012..35.428 rows=400000 loops=25)
Planning Time: 0.449 ms
Execution Time: 90.335 ms
(8 rows)

七、函数并行

1、并行函数

create or replace function ftest(int) returns boolean as $$
select $1<1000;
$$ language sql strict
parallel safe; -- parallel safe 语法

2、并行聚合函数

combinefunc    

最新文章

  1. HotApp小程序统计,第一个专业的微信第三方小程序统计工具
  2. 【OpenStack】OpenStack系列9之Compute节点安装
  3. Oracle中Clob类型处理解析
  4. [转载] LinkedIn架构这十年
  5. IOS开发-键盘通知自定义键盘
  6. html的视频插件 (转)
  7. CHS与LBA之间转换程序
  8. c++实现dll注入其它进程
  9. Android Tombstone/Crash的log分析和定位
  10. insmod: can&#39;t insert &#39;led.ko&#39;: invalid module format详细解释
  11. python安装win32api pywin32 后出现 ImportError: DLL load failed
  12. PMS 启动流程
  13. MySQL备忘录
  14. WebRTC MCU( Multipoint Conferencing Unit)服务器调研
  15. [Swift]LeetCode413. 等差数列划分 | Arithmetic Slices
  16. 记录腾讯云中矿机病毒处理过程(重装系统了fu*k)
  17. jenkins as code 与go语言学习
  18. 关于Fatal error: Paletter image not supported by webp 报错
  19. 剑指Offer_编程题_8
  20. springcloud 笔记

热门文章

  1. 【每日一题】【第一个出现的值】【二分】2022年1月10日-NC105 二分查找-II
  2. 使用python脚本传递参数:(三种方式可收藏)
  3. 伙伴福利,100个项目彻底精通Java!【开源】
  4. 自研分布式高性能RPC框架及服务注册中心实践笔记【原创】【开源】
  5. SQL语句查询优化方法
  6. MongoDB - 副本集简介
  7. C++进阶(位图+布隆过滤器的概念和实现+海量数据处理)
  8. 数位排序【第十三届蓝桥杯省赛C++C组】
  9. 软件安装——tortoiseGit安装和配置
  10. 初始化一个GCP项目并用gcloud访问操作