PostgreSQL并行計(jì)算算法及參數(shù)強(qiáng)制并行度設(shè)置方法
一、優(yōu)化器并行計(jì)算的并行度計(jì)算方法
1、總worker進(jìn)程數(shù)
postgres=# show ; max_worker_processes ---------------------- 128 (1 row)
2、所有會(huì)話,在同一時(shí)刻的QUERY,并行計(jì)算最大允許開(kāi)啟的WORKER數(shù)。
max_parallel_workers
3、單條QUERY中,每個(gè)node最多允許開(kāi)啟的并行計(jì)算WORKER數(shù)
postgres=# show max_parallel_workers_per_gather ; max_parallel_workers_per_gather --------------------------------- 0 (1 row)
4、單個(gè)query, node的并行度
Min(parallel_workers(表級(jí)設(shè)置,沒(méi)有設(shè)置則,根據(jù)表大小計(jì)算得到), max_parallel_workers_per_gather)
5、表級(jí)并行度參數(shù),默認(rèn)不設(shè)置,從表大小計(jì)算。
postgres=# alter table pa set (parallel_workers =32); ALTER TABLE
6、真實(shí)并行度算法
min (max_worker_processes - 已運(yùn)行workers , max_parallel_workers - 其他會(huì)話當(dāng)前真實(shí)啟用的并行度 , Min(parallel_workers(表級(jí)設(shè)置,沒(méi)有設(shè)置則,根據(jù)表大小計(jì)算得到), max_parallel_workers_per_gather) )
二、優(yōu)化器是否選擇并行計(jì)算
優(yōu)化器是否使用并行計(jì)算,取決于CBO,選擇成本最低的方法,并行計(jì)算成本估算,成本因子參數(shù)如下:
postgres=# show parallel_tuple_cost ; parallel_tuple_cost --------------------- 0 (1 row) postgres=# show parallel_setup_cost ; parallel_setup_cost --------------------- 0 (1 row)
如果非并行計(jì)算的執(zhí)行計(jì)劃成本低于并行計(jì)算的成本,則不使用并行計(jì)算。
三、優(yōu)化器是否忽略并行計(jì)算
如果表掃描或索引掃描的表或索引低于設(shè)置的閾值,這個(gè)表掃描或索引掃描則不啟用并行計(jì)算。
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)化器強(qiáng)制選擇并行計(jì)算參數(shù)
#force_parallel_mode = on
五、并行計(jì)算相關(guān)參數(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計(jì)算
#enable_parallel_hash = on
5、LEADER主動(dòng)獲取并行WORKER的返回結(jié)果
parallel_leader_participation = on
6、并行APPEND(分區(qū)表),UNION ALL查詢
#enable_parallel_append = on
六、強(qiáng)行并行
強(qiáng)制并行度24
1、總的可開(kāi)啟的WORKER足夠大 postgres=# show max_worker_processes ; max_worker_processes ---------------------- 128 (1 row) 2、所有會(huì)話同時(shí)執(zhí)行并行計(jì)算的并行度足夠大 postgres=# set max_parallel_workers=64; SET 3、單個(gè)QUERY中并行計(jì)算NODE開(kāi)啟的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、并行計(jì)算優(yōu)化器成本設(shè)置為0 postgres=# set parallel_tuple_cost =0; postgres=# set parallel_setup_cost =0; 6、設(shè)置表級(jí)并行度為24 postgres=# alter table pa set (parallel_workers =24); ALTER TABLE 7、效果,強(qiáng)制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 語(yǔ)法
2、并行聚合函數(shù)
combinefunc
到此這篇關(guān)于PostgreSQL 并行計(jì)算算法,參數(shù),強(qiáng)制并行度設(shè)置的文章就介紹到這了,更多相關(guān)PostgreSQL 并行計(jì)算算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mac系統(tǒng)重置PostgreSQL密碼的方法示例代碼
PostgreSQL 是一個(gè)免費(fèi)的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)服務(wù)器(ORDBMS),在靈活的BSD許可證下發(fā)行。這篇文章主要介紹了Mac系統(tǒng)重置PostgreSQL密碼的方法示例代碼,需要的朋友可以參考下2020-02-02postgreSQL 數(shù)字與字符串類(lèi)型轉(zhuǎn)換操作
這篇文章主要介紹了postgreSQL 數(shù)字與字符串類(lèi)型轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12如何獲取PostgreSQL數(shù)據(jù)庫(kù)中的JSON值
這篇文章主要介紹了如何獲取PostgreSQL數(shù)據(jù)庫(kù)中的JSON值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01在Ubuntu中安裝Postgresql數(shù)據(jù)庫(kù)的步驟詳解
PostgreSQL 是一款強(qiáng)大的,開(kāi)源的,對(duì)象關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)。它支持所有的主流操作系統(tǒng),包括 Linux、Unix(AIX、BSD、HP-UX,SGI IRIX、Mac OS、Solaris、Tru64) 以及 Windows 操作系統(tǒng)。本文給大家介紹了在Ubuntu中安裝Postgresql數(shù)據(jù)庫(kù)的步驟,需要的朋友可以參考下。2017-09-09pgsql之pg_stat_replication的使用詳解
這篇文章主要介紹了pgsql之pg_stat_replication的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01PostgreSQL教程(二十):PL/pgSQL過(guò)程語(yǔ)言
這篇文章主要介紹了PostgreSQL教程(二十):PL/pgSQL過(guò)程語(yǔ)言,本文講解了、PL/pgSQL概述、PL/pgSQL的結(jié)構(gòu)、聲明、基本語(yǔ)句、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下2015-05-05postgresql踩坑系列之關(guān)于to_date()問(wèn)題
這篇文章主要介紹了postgresql踩坑系列之關(guān)于to_date()問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03PostgreSQL?Log日志模塊原理及存在的問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于PostgreSQL?Log日志模塊原理及存在的問(wèn)題的相關(guān)資料,先日志在我們開(kāi)發(fā)過(guò)程中占據(jù)了一個(gè)非常重要的地位,是開(kāi)發(fā)和運(yùn)維管理之間的橋梁,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02