了解在PostgreSQL并行查询的会话中,工作池中还剩下多少并行工作器?

问题描述 投票:1回答:2

假设我的PostgreSQL数据库配置中有4个并行工作器池。我也有2节课。

在会话#1中,SQL当前正在执行,我的计划者随机选择为此查询启动2个工作程序。

因此,在第2场会议中,我怎么知道我的工人人数减少了2?

sql postgresql query-optimization postgresql-12 postgresql-parallel-query
2个回答
1
投票

您可以计算并行工作程序后端:

SELECT current_setting('max_parallel_workers')::integer AS max_workers,
       count(*) AS active_workers
FROM pg_stat_activity
WHERE backend_type = 'parallel worker';

0
投票

[内部,Postgres使用两个名为parallel_register_countparallel_terminate_count的变量来跟踪有多少个并行工作程序处于活动状态。两者之间的区别是活动并行工作者的数量。 See comment in in the source code.

注册新的并行工作程序之前,将根据max_parallel_workers设置in the source code here检查此编号。

不幸的是,我不知道有任何直接方法可以向用户显示此信息。

您将在查询计划中看到耗尽的限制的影响。您可以在通常并行化的大表上使用EXPLAIN ANALYZE查询尝试SELECT。您将看到使用的工人少于计划的工人。 The manual:

一次可以存在的后台工作者总数受max_worker_processesmax_parallel_workers限制。因此,并行查询有可能以更少的速度运行工人超过计划,甚至根本没有工人。

© www.soinside.com 2019 - 2024. All rights reserved.