2

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

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

那么,在会话#2 中,我怎么知道我的工人池减少了 2 个?

4

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';
于 2020-02-28T07:44:52.860 回答
0

parallel_register_count在内部,Postgres 使用名为和的两个变量跟踪有多少并行工作程序处于活动状态parallel_terminate_count。两者的区别在于活动并行工作者的数量。请参阅源代码中的注释。

在注册新的并行工作者之前,会根据此处源代码max_parallel_workers中的设置检查此编号。

不幸的是,我不知道有任何直接的方式可以将这些信息暴露给用户。

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

任何时候可以存在的后台工作人员的总数受到max_worker_processesmax_parallel_workers的限制。因此,并行查询有可能在少于计划的工作人员的情况下运行,甚至根本没有工作人员。

于 2020-02-28T00:09:25.453 回答