【问题标题】:Understanding how many parallel workers remain from a worker pool across sessions for PostgreSQL parallel queries?了解 PostgreSQL 并行查询的会话中工作池中剩余多少并行工作人员?
【发布时间】:2020-02-27 19:39:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql postgresql query-optimization postgresql-12 postgresql-parallel-query


    【解决方案1】:

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

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

    【讨论】:

    • 假设一个 SQL 查询保留了 2 个并行工作者。在 SQL 查询执行完成之前,max_parallel_worker 变量会减少 2 吗?执行此操作的参数 - 如果它甚至存在的话 - 就是我正在寻找的。​​span>
    • 没有参数。我没有阅读源代码;也许有一个全局变量可以从 C 函数访问,但肯定不能从 SQL 访问。查询有什么问题?
    • 只需将我的查询返回的两个数字相减,即可得到结果。
    • 我在 Postgres 10.7 Aurora 实例上对此进行了测试。有趣的是,它为并行工作人员报告了“后台工作人员”而不是“并行工作人员”。 (使用EXPLAIN ANALYZE 验证了并行性。)在纯 Postgres 实例中测试相同,它按预期报告“并行工作者”。可能是因为 Aurora 在幕后以不同的方式实现并行。
    • @ErwinBrandstetter 感谢您的收看。好吧,使用闭源 PostgreSQL 分叉有一定的缺点。
    【解决方案2】:

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

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

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

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

    任意时刻可以存在的后台worker总数 受max_worker_processesmax_parallel_workers 的限制。 因此,并行查询可以用更少的 工人比计划的多,甚至根本没有工人。

    【讨论】:

    • 谢谢;这与我正在寻找的非常相似。只是为了澄清一下,如果我发出一个保留 2 个工作人员的查询,那么当我执行 parallel_terminate_count - parallel_register_count 时,我会看到 2 个?我想这就是它所说的,但我并不真正理解parallel_terminate_count 的目的。
    • @baceda9220:反转:parallel_register_count - parallel_terminate_count - 它是注册(使用)并行工作人员的数量减去终止的数量。但这些是 C 代码中的内部变量。我不知道如何将它们公开给用户。 Laurenz 有一个更实用的方法。
    猜你喜欢
    • 2019-03-08
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2015-11-21
    相关资源
    最近更新 更多