PostgreSQL并行計算算法及參數(shù)強制并行度設置方法
一、優(yōu)化器并行計算的并行度計算方法
1、總worker進程數(shù)
postgres=# show ; max_worker_processes ---------------------- 128 (1 row)
2、所有會話,在同一時刻的QUERY,并行計算最大允許開啟的WORKER數(shù)。
max_parallel_workers
3、單條QUERY中,每個node最多允許開啟的并行計算WORKER數(shù)
postgres=# show max_parallel_workers_per_gather ; max_parallel_workers_per_gather --------------------------------- 0 (1 row)
4、單個query, node的并行度
Min(parallel_workers(表級設置,沒有設置則,根據(jù)表大小計算得到), max_parallel_workers_per_gather)
5、表級并行度參數(shù),默認不設置,從表大小計算。
postgres=# alter table pa set (parallel_workers =32); ALTER TABLE
6、真實并行度算法
min (max_worker_processes - 已運行workers ,
max_parallel_workers - 其他會話當前真實啟用的并行度 ,
Min(parallel_workers(表級設置,沒有設置則,根據(jù)表大小計算得到), max_parallel_workers_per_gather)
) 二、優(yōu)化器是否選擇并行計算
優(yōu)化器是否使用并行計算,取決于CBO,選擇成本最低的方法,并行計算成本估算,成本因子參數(shù)如下:
postgres=# show parallel_tuple_cost ; parallel_tuple_cost --------------------- 0 (1 row) postgres=# show parallel_setup_cost ; parallel_setup_cost --------------------- 0 (1 row)
如果非并行計算的執(zhí)行計劃成本低于并行計算的成本,則不使用并行計算。
三、優(yōu)化器是否忽略并行計算
如果表掃描或索引掃描的表或索引低于設置的閾值,這個表掃描或索引掃描則不啟用并行計算。
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)
四、優(yōu)化器強制選擇并行計算參數(shù)
#force_parallel_mode = on
五、并行計算相關參數(shù)
1、創(chuàng)建索引,CREATE TABLE AS,SELECT INTO 的并行度
postgres=# show max_parallel_maintenance_workers ; max_parallel_maintenance_workers ---------------------------------- 24 (1 row)
2、并行分區(qū)表JOIN
#enable_partitionwise_join = on
3、并行分區(qū)表分區(qū)聚合
#enable_partitionwise_aggregate = on
4、并行HASH計算
#enable_parallel_hash = on
5、LEADER主動獲取并行WORKER的返回結(jié)果
parallel_leader_participation = on
6、并行APPEND(分區(qū)表),UNION ALL查詢
#enable_parallel_append = on
六、強行并行
強制并行度24
1、總的可開啟的WORKER足夠大
postgres=# show max_worker_processes ;
max_worker_processes
----------------------
128
(1 row)
2、所有會話同時執(zhí)行并行計算的并行度足夠大
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、并行計算優(yōu)化器成本設置為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) 七、函數(shù)并行
1、并行函數(shù)
create or replace function ftest(int) returns boolean as $$
select $1<1000;
$$ language sql strict
parallel safe;
-- parallel safe 語法 2、并行聚合函數(shù)
combinefunc
到此這篇關于PostgreSQL 并行計算算法,參數(shù),強制并行度設置的文章就介紹到這了,更多相關PostgreSQL 并行計算算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Ruoyi從mysql切換到postgresql的幾個踩坑實戰(zhàn)
最近由于工作的原因,需要將Ruoyi從mysql切換到postgresql,所以這篇文章主要給大家介紹了關于Ruoyi從mysql切換到postgresql的幾個踩坑實戰(zhàn),需要的朋友可以參考下2023-02-02
postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作
這篇文章主要介紹了postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
PostgreSQL導出數(shù)據(jù)庫表(或序列)的結(jié)構(gòu)和數(shù)據(jù)實例代碼
這篇文章主要給大家介紹了關于PostgreSQL導出數(shù)據(jù)庫表(或序列)的結(jié)構(gòu)和數(shù)據(jù)的相關資料,你可以使用pg_dump命令來導出PostgreSQL數(shù)據(jù)庫中的表結(jié)構(gòu)和數(shù)據(jù),需要的朋友可以參考下2023-10-10
使用PostgreSQL為表或視圖創(chuàng)建備注的操作
這篇文章主要介紹了使用PostgreSQL為表或視圖創(chuàng)建備注的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
postgresql如何找到表中重復數(shù)據(jù)的行并刪除
這篇文章主要介紹了postgresql如何找到表中重復數(shù)據(jù)的行并刪除問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
基于PostgreSQL的時序數(shù)據(jù)庫TimescaleDB的基本用法和概念
時序數(shù)據(jù)是指按照時間順序存儲的數(shù)據(jù),TimescaleDB是一個開源的、擴展了PostgreSQL的時序數(shù)據(jù)庫擴展,本文就給大家詳細的介紹一下基于PostgreSQL的時序數(shù)據(jù)庫TimescaleDB的基本用法和概念,需要的朋友可以參考下2023-06-06
使用PostgreSQL數(shù)據(jù)庫建立用戶畫像系統(tǒng)的方法
這篇文章主要介紹了使用PostgreSQL數(shù)據(jù)庫建立用戶畫像系統(tǒng),下面使用一個具體的例子來說明如何使用PostgreSQL的json數(shù)據(jù)類型來建立用戶標簽數(shù)據(jù),需要的朋友可以參考下2022-10-10

