假设我的PostgreSQL数据库配置中有4个并行工作器池。我也有2节课。
在会话#1中,SQL当前正在执行,我的计划者随机选择为此查询启动2个工作程序。
因此,在第2场会议中,我怎么知道我的工人人数减少了2?
您可以计算并行工作程序后端:
SELECT current_setting('max_parallel_workers')::integer AS max_workers,
count(*) AS active_workers
FROM pg_stat_activity
WHERE backend_type = 'parallel worker';
[内部,Postgres使用两个名为parallel_register_count
和parallel_terminate_count
的变量来跟踪有多少个并行工作程序处于活动状态。两者之间的区别是活动并行工作者的数量。 See comment in in the source code.
注册新的并行工作程序之前,将根据max_parallel_workers
设置in the source code here检查此编号。
不幸的是,我不知道有任何直接方法可以向用户显示此信息。
您将在查询计划中看到耗尽的限制的影响。您可以在通常并行化的大表上使用EXPLAIN ANALYZE
查询尝试SELECT
。您将看到使用的工人少于计划的工人。 The manual:
一次可以存在的后台工作者总数受max_worker_processes和max_parallel_workers限制。因此,并行查询有可能以更少的速度运行工人超过计划,甚至根本没有工人。