FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
PostgreSQL算子并行测试

一、概要

PostgreSQL从9.6版本开始,增加了算子并行功能,基于多进程方式实现,而非多线程。

与算子并行相关的参数主要有两个:

  • max_worker_processes:并行worker池最大进程个数,默认为8。
  • max_parallel_workers_per_gather:查询并行度,即一条查询最多开多少个并行计算进程。默认为2。0表示禁止并行。注意:该参数表示最大并行度,并不代表一定使用这么的并行度。

二、查询参数

snippet.sql
tpch1s=# SHOW max_worker_processes;
 max_worker_processes 
----------------------
 8
(1 ROW)
 
tpch1s=# SHOW max_parallel_workers_per_gather;
 max_parallel_workers_per_gather 
---------------------------------
 2
(1 ROW)

三、并行验证

当max_parallel_workers_per_gather=2时,执行TPC-H q1,可以观察到有2个“parallel worker”进程,worker进程的父进程是“/opt/postgresql/bin/postgres -D /opt/pgdata”:

snippet.bash
[postgres@bogon ~]$ ps ux | grep postgres
postgres  67582  0.4  0.2 272596 13544 ?        Ss   16:53   0:00 /opt/postgresql/bin/postgres -D /opt/pgdata
……
postgres  67590  0.0  0.0 124964  1836 pts/0    S+   16:53   0:00 psql tpch1s
postgres  67591  3.1  0.2 282012 10564 ?        Rs   16:53   0:02 postgres: postgres tpch1s [local] SELECT
postgres  67717 38.1  0.1 280668  7868 ?        Rs   16:54   0:02 postgres: parallel worker for PID 67591   
postgres  67718 26.8  0.1 280700  7800 ?        Rs   16:54   0:01 postgres: parallel worker for PID 67591   

当max_parallel_workers_per_gather=4时,执行TPC-H q1,可以观察到有4个“parallel worker”进程:

snippet.bash
[postgres@bogon ~]$ ps ux | grep postgres
postgres  67582  0.5  0.2 272596 13544 ?        Ss   16:53   0:00 /opt/postgresql/bin/postgres -D /opt/pgdata
……  
postgres  67590  0.0  0.0 124964  2068 pts/0    S+   16:53   0:00 psql tpch1s
postgres  67591  8.3  0.2 276208 11252 ?        Rs   16:53   0:09 postgres: postgres tpch1s [local] SELECT
postgres  67741 41.0  0.0 274364  4772 ?        Rs   16:54   0:01 postgres: parallel worker for PID 67591   
postgres  67742 27.6  0.0 274364  4776 ?        Rs   16:54   0:00 postgres: parallel worker for PID 67591   
postgres  67743 37.0  0.0 274364  4772 ?        Rs   16:54   0:01 postgres: parallel worker for PID 67591   
postgres  67744 28.3  0.0 274368  4760 ?        Rs   16:54   0:00 postgres: parallel worker for PID 67591   

当max_parallel_workers_per_gather=0时,执行TPC-H q1,可以观察到没有“parallel worker”进程,计算由“postgres tpch1s [local] SELECT”进程完成。

snippet.bash
[postgres@bogon ~]$ ps ux | grep postgres
postgres  67582  0.0  0.2 272596 13544 ?        Ss   16:53   0:00 /opt/postgresql/bin/postgres -D /opt/pgdata
……
postgres  67590  0.0  0.0 124964  2076 pts/0    S+   16:53   0:00 psql tpch1s
postgres  67591  1.5  0.2 275860 11820 ?        Rs   16:53   0:14 postgres: postgres tpch1s [local] SELECT

四、参考



打赏作者以资鼓励:
移动端扫码阅读: