PostgreSQL 9.6并行聚合函数

4

PostgreSQL 9.6版本增加了对并行聚合的支持。

在9.6中,PostgreSQL引入了大型查询并行执行的初始支持。只有严格的只读查询可以通过顺序扫描访问驱动表来并行化。哈希连接和嵌套循环可以并行执行,支持的聚合函数也可以进行并行计算。虽然还有很多工作要做,但这已经是一个有用的功能集。

  • 上述提到的支持的聚合函数有哪些?
  • 在设计聚合函数时是否需要考虑特殊因素以允许使用并行机制?

3
任何被标记为“并行安全”的函数/聚合函数都将在查询计划时被考虑。请参阅pg_proc.proparallel:http://www.postgresql.org/docs/9.6/static/catalog-pg-proc.html - user330315
1个回答

1

PostgreSQL 9.6 用户自定义聚合文档现在提到了并行聚合:

35.10.4. 部分聚合

可选地,聚合函数可以支持部分聚合。部分聚合的思想是独立地运行聚合状态转换函数于不同子集的输入数据中,然后将从这些子集得出的状态值组合起来,以产生与在单个操作中扫描所有输入所产生的相同状态值。该模式可用于并行聚合,通过让不同工作进程扫描表的不同部分。每个工作进程生成一个部分状态值,最终这些状态值被组合以生成最终状态值。(在未来,该模式也可能用于将本地和远程表的聚合组合起来;但目前尚未实现。)

为了支持部分聚合,聚合定义必须提供一个组合函数,该函数接受两个聚合状态类型的值(表示对两个输入行子集进行聚合的结果),并生成一个新的状态类型的值,表示聚合那些行集的组合之后的状态。未指定来自两个集合的输入行的相对顺序。这意味着通常无法为对输入行顺序敏感的聚合定义有用的组合函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接