假设我的PostgreSQL数据库配置中有一个由4个并行工作进程组成的池。我还有两个会话。
在session#1中,SQL当前正在执行,我的计划员随机选择为该查询启动2个工作进程。
那么,在session#2中,我如何知道我的工作人员池减少了2个呢?
发布于 2020-02-28 15:44:53
您可以计算并行worker后端:
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-28 08:09:25
在内部,Postgres使用两个名为parallel_register_count和parallel_terminate_count的变量来跟踪有多少并行工作线程处于活动状态。两者之间的区别在于活动的并行工作线程的数量。See comment in in the source code.
在注册新的并行工作线程之前,将根据max_parallel_workers设置in the source code here检查此编号。
不幸的是,我不知道有什么直接的方法可以将这些信息暴露给用户。
您将看到查询计划中耗尽限制的效果。您可以在通常并行化的大表上使用SELECT查询尝试EXPLAIN ANALYZE。您将看到使用的工人比计划的工人更少。The manual:
可同时存在的后台工作线程总数受max_worker_processes和max_parallel_workers的限制。因此,运行并行查询的工作进程可能比计划的少,甚至根本没有工作进程。
https://stackoverflow.com/questions/60440628
复制相似问题