是否可以在 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 查询分区表?的主要内容,如果未能解决你的问题,请参考以下文章