是否可以在 Postgres 中执行并行查询,使用 union all 查询分区表?

Posted

技术标签:

【中文标题】是否可以在 Postgres 中执行并行查询,使用 union all 查询分区表?【英文标题】:Is it possible to execute parallel query in Postgres which queries partitioned table by using union all? 【发布时间】:2021-11-06 21:42:35 【问题描述】:

您好,我正在使用带有 trigram 模块和分区表的 GIN 索引将 postgres 用作搜索引擎,并且我正在尝试并行化查询,但无论我设置什么查询始终是顺序的,欢迎任何想法。查看图片了解更多信息。这是一个查询(test_trgm_x 是每个包含大约 550k 行的分区)

SELECT * FROM test_trgm_1 WHERE n = 1 AND t ~ '(ulpa)'
UNION ALL
SELECT * FROM test_trgm_2 WHERE n = 2 AND t ~ '(piente)';

【问题讨论】:

【参考方案1】:

parallel_tuple_cost 的默认设置相当高。这不鼓励在像您这样的情况下使用并行查询,在这种情况下,几乎在并行工作者中找到的每一行都需要推到领导者身上。如果你设置parallel_tuple_cost=0,它真的会鼓励使用并行查询(即使使用它没有意义)。

【讨论】:

我已将这些变量 (parallel_tuple_cost parallel_setup_cost) 设置为 0,但查询仍按顺序执行。我开始认为这可能只是分区表的限制;( 为我工作。你有没有得到 any 并行查询执行?我会在 db-fiddle 上向您展示,但它不支持 pg_trgm。

以上是关于是否可以在 Postgres 中执行并行查询,使用 union all 查询分区表?的主要内容,如果未能解决你的问题,请参考以下文章

为单个 Django 查询关闭 Postgres 并行查询

PostgreSQL 在多大程度上支持并行 DDL?

Postgres 9.6 并行 XPath

Oracle“并行执行”之二——并行执行类型

使用 SPI 的 PostgreSQL 并行查询可能吗?

如何在postgres中查询最近更新日期的同类别AVG值?