↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

百科 / 配置参数 / 查询规划

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

enable_eager_aggregate

启用或禁用查询规划器使用急切聚合的能力,即将聚合部分地下推到连接之前,并在所有关系完成连接后再做最终聚合。

Enables eager aggregation.

布尔 引入 19 现存至 20 devel 0 次默认值变更 开发版

类型
布尔bool
引入版本
19
状态
现存

PostgreSQL 20 devel 手册 官方文档 引入提交 8e11859102

版本轨迹

相对 PostgreSQL 19 无变化。 20 开发版尚未定稿:类型与说明取自手册,默认值、上下文和运行值尚未采样。

默认值变迁

on 19

仅记录了 PostgreSQL 19 的默认值。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

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

启用或禁用查询规划器使用急切聚合的能力,即将聚合部分地下推到连接之前,并在所有关系完成连接后再做最终聚合。默认值为 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 正式版发布后重新验证。

演化历史

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

  1. PostgreSQL 19 ← 18 新增此参数

    PostgreSQL 19 起可用

逐版本快照

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

版本 默认值单位上下文类型最小值最大值枚举值
19 on — 会话 布尔 — — —
20 — — — 布尔 — — —

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Query Tuning 查询规划 26 个 ↗
规划器方法配置 26
enable_async_append 布尔 会话 on —
启用或禁用查询规划器对支持异步执行的 append 计划类型的使用。 现存
enable_bitmapscan 布尔 会话 on —
启用或禁用查询规划器对位图扫描计划类型的使用。 现存
enable_distinct_reordering 布尔 会话 on —
启用或禁用查询规划器重新排序 DISTINCT 键以匹配输入路径的路径键的能力。 现存
enable_eager_aggregate 布尔 — —
启用或禁用查询规划器使用急切聚合的能力,即将聚合部分地下推到连接之前,并在所有关系完成连接后再做最终聚合。 现存
enable_gathermerge 布尔 会话 on —
启用或禁用查询规划器对收集归并计划类型的使用。 现存
enable_group_by_reordering 布尔 会话 on —
控制查询规划器是否生成让 GROUP BY 键按照计划子节点(例如索引扫描)的键顺序排序的计划。 现存
enable_groupagg 布尔 — —
启用或禁用查询规划器使用基于排序的分组和聚合计划类型。 现存
enable_hashagg 布尔 会话 on —
启用或禁用查询规划器对 hash 聚合计划类型的使用。 现存
enable_hashjoin 布尔 会话 on —
启用或禁用查询规划器对哈希连接计划类型的使用。 现存
enable_incremental_sort 布尔 会话 on —
启用或禁用查询规划器对增量排序步骤的使用。 现存
enable_indexonlyscan 布尔 会话 on —
启用或禁用查询规划器对仅索引扫描计划类型的使用(参见第 11.9 节)。 现存
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 —
启用或禁用查询规划器对使用并行 hash 的哈希连接计划类型的使用。 现存
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 扫描计划类型。 现存