PostgreSQL并行计算算法及参数强制并行度设置方法


Posted in PostgreSQL onApril 06, 2022

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

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;  
4、所有表和索引扫描允许并行  
postgres=# set min_parallel_table_scan_size =0;  
postgres=# set min_parallel_index_scan_size =0;  
5、并行计算优化器成本设置为0  
postgres=# set parallel_tuple_cost =0;  
postgres=# set parallel_setup_cost =0;  
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

到此这篇关于PostgreSQL 并行计算算法,参数,强制并行度设置的文章就介绍到这了,更多相关PostgreSQL 并行计算算法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PostgreSQL 相关文章推荐
如何使用PostgreSQL进行中文全文检索
May 27 PostgreSQL
postgresql无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
通过Qt连接OpenGauss数据库的详细教程
Jun 23 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
postgresql 删除重复数据案例详解
Aug 02 PostgreSQL
关于PostgreSQL JSONB的匹配和交集问题
Sep 14 PostgreSQL
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 PostgreSQL
PostgreSQL事务回卷实战案例详析
Mar 25 PostgreSQL
PostgreSQL聚合函数介绍以及分组和排序
Apr 12 PostgreSQL
PostgreSQL基于pgrouting的路径规划处理方法
Apr 18 PostgreSQL
postgresql之greenplum字符串去重拼接方式
May 08 PostgreSQL
PostgreSQL事务回卷实战案例详析
Mar 25 #PostgreSQL
Oracle配置dblink访问PostgreSQL的操作方法
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 #PostgreSQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
PostGIS的安装与入门使用指南
PostgreSQL13基于流复制搭建后备服务器的方法
基于PostgreSQL/openGauss 的分布式数据库解决方案
You might like
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
晶体管单管来复再生式收音机
2021/03/02 无线电
再次研究下cache_lite
2007/02/14 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
linux面试题参考答案(5)
2016/11/05 面试题
创伤外科专业推荐信范文
2013/11/19 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
故宫导游词
2015/01/31 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL