选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 查询规划

CONFIGURATION PARAMETER查询规划 / 规划器方法配置

enable_partitionwise_join

允许按匹配分区执行连接。

Enables partitionwise join.

布尔 会话 引入 11 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
会话任何用户都可在会话内用 SET 修改
默认值
off
引入版本
11
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 2fb1abaeb0

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

off 11 – 20

默认值自 PostgreSQL 11 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.7 查询规划 本站手册 官方原文

本版译文与 PostgreSQL 14 完全一致,下面就是同一段文字。

允许或者禁止查询规划器使用面向分区的连接,这使得分区表之间的连接以连接匹配的分区的方式来执行。 面向分区的连接当前只适用于连接条件包括所有分区键的情况,连接条件必须是相同的数据类型并且子分区集合要1对1匹配。 由于面向分区的连接规划在规划期间会使用可观的CPU时间和内存,所以默认值为off

机制详解

enable_partitionwise_join 控制规划器是否可以选择当连接键包含兼容分区键时,对一一匹配的分区分别执行连接。

该值在生成计划时读取。会话级修改适合比较不同 EXPLAIN 方案,但不会追溯改写已缓存计划;必须触发失效或重新规划才能观察到不同选择。

参与分区增多时,它可能近似线性地增加受 work_mem 限制的节点和规划成本。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    常规 OLTP 保持上游默认 off。只有两侧是一一兼容分区布局且连接包含全部分区键时,才在会话范围测试 on;同时预算每分区产生的规划 CPU 与受 work_mem 限制节点。

  • OLAP分析与批处理

    应比较规划内存、规划时间、总执行内存与分区数,不能只看执行时间。

  • 小规格低配实例与开发机

    除非特定分区对齐连接反复获益,否则保持 off。分区很多时,即使每个局部连接高效,规划与每节点内存也可能在小主机上失衡。

常见问题

  • 把 enable_partitionwise_join 当成单条查询 hint,却忽略它会影响作用域内生成的所有计划。
  • 用已经缓存的预备计划测试,然后误判该参数没有效果。
  • 通过全局禁用计划方法来掩盖统计信息陈旧或基数估算错误。
  • 参与分区增多时,它可能近似线性地增加受 work_mem 限制的节点和规划成本。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 11 ← 10 新增此参数

    PostgreSQL 11 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
11 off 会话 布尔
12 off 会话 布尔
13 off 会话 布尔
14 off 会话 布尔
15 off 会话 布尔
16 off 会话 布尔
17 off 会话 布尔
18 off 会话 布尔
19 off 会话 布尔
20 沿用 off 会话 布尔

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Query Tuning 查询规划 26 个
规划器方法配置 26
enable_async_append 布尔 会话 on
允许规划器使用异步 Append 计划。 现存
enable_bitmapscan 布尔 会话 on
允许规划器使用位图扫描计划。 现存
enable_distinct_reordering 布尔 会话 on
允许规划器重排 DISTINCT 键。 现存
enable_eager_aggregate 布尔 会话 on
允许规划器把部分聚合提前推过连接。 现存
enable_gathermerge 布尔 会话 on
允许规划器使用 Gather Merge 计划。 现存
enable_group_by_reordering 布尔 会话 on
允许规划器重排 GROUP BY 键。 现存
enable_groupagg 布尔
启用或禁用查询规划器使用基于排序的分组和聚合计划类型。 现存
enable_hashagg 布尔 会话 on
允许规划器使用哈希聚合计划。 现存
enable_hashjoin 布尔 会话 on
允许规划器使用哈希连接计划。 现存
enable_incremental_sort 布尔 会话 on
允许规划器使用增量排序步骤。 现存
enable_indexonlyscan 布尔 会话 on
允许规划器使用仅索引扫描计划。 现存
enable_indexscan 布尔 会话 on
允许规划器使用索引扫描计划。 现存
enable_material 布尔 会话 on
允许规划器插入物化节点。 现存
enable_memoize 布尔 会话 on
允许规划器使用 Memoize 缓存节点。 现存
enable_mergejoin 布尔 会话 on
允许规划器使用归并连接计划。 现存
enable_nestloop 布尔 会话 on
允许规划器使用嵌套循环连接计划。 现存
enable_parallel_append 布尔 会话 on
允许规划器使用并行感知的 Append 计划。 现存
enable_parallel_hash 布尔 会话 on
允许规划器使用并行哈希计划。 现存
enable_partition_pruning 布尔 会话 on
允许在规划和执行阶段裁剪分区。 现存
enable_partitionwise_aggregate 布尔 会话 off
允许按分区执行聚合与分组。 现存
enable_partitionwise_join 布尔 会话 off
允许按匹配分区执行连接。 现存
enable_presorted_aggregate 布尔 会话 on
允许规划器为带 ORDER BY 或 DISTINCT 的聚合提供预排序输入。 现存
enable_self_join_elimination 布尔 会话 on
允许消除可证明冗余的唯一自连接。 现存
enable_seqscan 布尔 会话 on
允许规划器使用顺序扫描计划。 现存
enable_sort 布尔 会话 on
允许规划器使用显式排序步骤。 现存
enable_tidscan 布尔 会话 on
允许规划器使用 TID 扫描计划。 现存