# 一、概要 PostgreSQL从9.6版本开始,增加了算子并行功能,基于多进程方式实现,而非多线程。 与算子并行相关的参数主要有两个: - max\_worker\_processes:并行worker池最大进程个数,默认为8。 - max\_parallel\_workers\_per\_gather:查询并行度,即一条查询最多开多少个并行计算进程。默认为2。0表示禁止并行。注意:该参数表示最大并行度,并不代表一定使用这么的并行度。 # 二、查询参数 ```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”: ```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”进程: ```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”进程完成。 ```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 ``` # 四、参考 - [PostgreSQL Document: max_parallel_workers_per_gather](https://www.postgresqlco.nf/zh/doc/param/max_parallel_workers_per_gather/)