假设我的 PostgreSQL 数据库配置中有 4 个并行工作人员池。我也有 2 节课。
在 session#1 中,SQL 当前正在执行,我的规划器随机选择为此查询启动 2 个工作程序。
那么,在会话#2 中,我怎么知道我的工人池减少了 2 个?
假设我的 PostgreSQL 数据库配置中有 4 个并行工作人员池。我也有 2 节课。
在 session#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';
parallel_register_count
在内部,Postgres 使用名为和的两个变量跟踪有多少并行工作程序处于活动状态parallel_terminate_count
。两者的区别在于活动并行工作者的数量。请参阅源代码中的注释。
在注册新的并行工作者之前,会根据此处源代码max_parallel_workers
中的设置检查此编号。
不幸的是,我不知道有任何直接的方式可以将这些信息暴露给用户。
您将在查询计划中看到用尽限制的影响。您可以尝试对通常并行化的大表EXPLAIN ANALYZE
进行查询。SELECT
您会看到使用的工人少于计划的工人。手册:
任何时候可以存在的后台工作人员的总数受到max_worker_processes和max_parallel_workers的限制。因此,并行查询有可能在少于计划的工作人员的情况下运行,甚至根本没有工作人员。