PostgreSQL并行计算算法及参数强制并行度怎么设置
这篇文章主要讲解了“PostgreSQL并行计算算法及参数强制并行度怎么设置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL并行计算算法及参数强制并行度怎么设置”吧!
一、优化器并行计算的并行度计算方法
总worker进程数
postgres=# show ; max_worker_processes ---------------------- 128 (1 row)
所有会话,在同一时刻的QUERY,并行计算最大允许开启的WORKER数。
max_parallel_workers
单条QUERY中,每个node最多允许开启的并行计算WORKER数
postgres=# show max_parallel_workers_per_gather ; max_parallel_workers_per_gather --------------------------------- 0 (1 row)
单个query, node的并行度
Min(parallel_workers(表级设置,没有设置则,根据表大小计算得到), max_parallel_workers_per_gather)
表级并行度参数,默认不设置,从表大小计算。
postgres=# alter table pa set (parallel_workers =32); ALTER TABLE
真实并行度算法
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
五、并行计算相关参数
创建索引,CREATE TABLE AS,SELECT INTO 的并行度
postgres=# show max_parallel_maintenance_workers ; max_parallel_maintenance_workers ---------------------------------- 24 (1 row)
并行分区表JOIN
#enable_partitionwise_join = on
并行分区表分区聚合
#enable_partitionwise_aggregate = on
并行HASH计算
#enable_parallel_hash = on
LEADER主动获取并行WORKER的返回结果
parallel_leader_participation = on
并行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)
七、函数并行
并行函数
create or replace function ftest(int) returns boolean as $$ select $1<1000; $$ language sql strict parallel safe; -- parallel safe 语法
并行聚合函数
combinefunc
感谢各位的阅读,以上就是“PostgreSQL并行计算算法及参数强制并行度怎么设置”的内容了,经过本文的学习后,相信大家对PostgreSQL并行计算算法及参数强制并行度怎么设置这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341