【问题标题】:postgres materialized view refresh in parallelpostgres物化视图并行刷新
【发布时间】:2021-07-01 21:04:22
【问题描述】:

通过将 max_parallel_workers_per_gather 设置为 4 来并行创建物化视图。我可以看到并行会话开始并创建 mview 比串行执行快得多(10 分钟 - 并行 vs 一个多小时 - 串行)。

现在我希望 mview 的刷新时间与创建时间差不多,我可以接受它只需要创建时间来执行刷新视图时所需的步骤。但我注意到,刷新根本没有并行运行——即使在将 max_parallel_workers_per_gather 设置为 4 之后。PostgreSQL 11.6 是否不支持在创建 mview 时并行刷新它?

【问题讨论】:

  • 不,很遗憾。我个人删除并重新创建(+所有依赖对象)重物化视图,并刷新更简单的视图
  • 感谢@JGH 的分享,我最终做了同样的事情。
  • @nmakb.说点别的,在我看来,我认为只读表和具有相同结构的物化视图之间没有太大区别。你认为物化视图比表有什么提升吗在实践中?
  • @spikle,是的,有区别。如果您使用只读表,并且想要刷新它 - 如果您想保持 orig 对用户可用,则需要创建新表并将其重命名为 orig。如果您删除 orig 只读表,那么在重新创建它时它将不可用。当您使用物化视图时,这两种情况都需要注意,因为它还提供并发刷新功能。

标签: postgresql


【解决方案1】:

PostgreSQL 11.6 是否不支持并行刷新 mview 它在创建时做了吗?

完全正确:REFRESH(CREATE MV 除外)不能在 PG 11 中使用并行工作者 ...

但是好消息:PostgreSQL 14 支持它:引用 PostgreSQL 14 Feature Highlights

PostgreSQL 14 中的查询并行性有很多改进。在 除了并行顺序的整体性能改进 扫描,PL/pgSQL 中的 RETURN QUERY 指令现在可以执行查询 具有并行性。 REFRESH MATERIALIZED VIEW 现在可以使用查询 并行性也是如此。

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2020-12-03
    • 1970-01-01
    • 2017-06-07
    • 2023-03-16
    相关资源
    最近更新 更多