CONFIGURATION PARAMETER查询规划 / 规划器方法配置
enable_eager_aggregate
允许规划器把部分聚合提前推过连接。
Enables eager aggregation.
布尔 会话 引入 19 现存至 20 devel 0 次默认值变更 开发版
- 类型
- 布尔bool
- 上下文
- 会话任何用户都可在会话内用 SET 修改
- 默认值
on- 引入版本
- 19
- 状态
- 现存
版本轨迹
PostgreSQL 20 开发版沿用 19 的 pg_settings 事实,说明取自 devel 手册。 20 开发版尚未定稿:pg_settings 事实沿用 19,说明取自本站 devel 手册。
默认值变迁
默认值自 PostgreSQL 19 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
本版译文与 PostgreSQL 19 完全一致,下面就是同一段文字。
启用或禁用查询规划器使用急切聚合的能力,即将聚合部分地下推到连接之前,并在所有关系完成连接后再做最终聚合。默认值为on。
机制详解
enable_eager_aggregate:允许规划器把部分聚合提前推过连接。它可以按会话修改,便于在不影响全部负载的前提下比较计划或行为。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。
提前聚合会把部分聚合下推到连接之前,从而减少穿过连接的行数,再在全部关系连接后完成最终聚合。只有估算平均分组尺寸达到 min_eager_agg_group_size 才会考虑;基数估算、分组语义、内存和其他连接路径仍决定规划器是否采用。
应与 min_eager_agg_group_size、enable_hashagg、enable_partitionwise_aggregate、work_mem 一起理解。请在目标服务器检查 SHOW 与 pg_settings,确认 source 和 pending_restart,并在修改前后对比真实负载、日志和资源指标。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
先按会话使用 EXPLAIN (ANALYZE, BUFFERS) 和有代表性的参数分布实验。只有提前聚合能稳定减少行数和延迟、且不引入计划抖动时才偏离默认值。
-
OLAP分析与批处理
测试确有预聚合机会的连接,并覆盖新旧统计信息与落盘压力;比较总 CPU、峰值内存、中间行数和并行计划,而不只看一次耗时。
-
小规格低配实例与开发机
在定位出可复现回归前保持规划器开关与阈值默认。先修复基数统计;全局强制路径常会用一个查询的收益换来更多回归。
常见问题
- 把 enable_eager_aggregate 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
- 忽略 pg_settings 报告的 user context,误以为修改会立即生效。
- 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
- 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 19 ← 18 新增此参数
PostgreSQL 19 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 规划器方法配置 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 扫描计划。 | 现存 | ||||