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
四、参考
打赏作者以资鼓励: