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

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

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

CONFIGURATION PARAMETER查询规划 / 规划器代价常量

min_eager_agg_group_size

设置考虑提前聚合所需的最小平均分组大小。

Sets the minimum average group size required to consider applying eager aggregation.

浮点 会话 引入 19 现存至 20 devel 0 次默认值变更 开发版

类型
浮点real
上下文
会话任何用户都可在会话内用 SET 修改
默认值
8
取值范围
0 – 1.79769e+308
引入版本
19
状态
现存

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

版本轨迹

PostgreSQL 20 开发版沿用 19 的 pg_settings 事实,说明取自 devel 手册。 20 开发版尚未定稿:pg_settings 事实沿用 19,说明取自本站 devel 手册。

默认值变迁

8 19 – 20

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

手册说明

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

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

设置考虑应用急切聚合所需的最小平均分组大小。这有助于在急切聚合不能显著减少行数时避免其开销。默认值为8

机制详解

min_eager_agg_group_size:设置考虑提前聚合所需的最小平均分组大小。它可以按会话修改,便于在不影响全部负载的前提下比较计划或行为。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

这个成本阈值表示:估算每组平均至少有多少输入行,提前聚合才值得考虑。提高它会要求更明显的行数缩减;降低它会探索更多提前聚合路径,但可能把规划与执行开销花在几乎不能缩小连接输入的分组上。

应与 enable_eager_aggregate、enable_hashagg、enable_partitionwise_aggregate、work_mem 一起理解。请在目标服务器检查 SHOW 与 pg_settings,确认 source 和 pending_restart,并在修改前后对比真实负载、日志和资源指标。

调优建议

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

  • OLTP在线事务处理

    先按会话使用 EXPLAIN (ANALYZE, BUFFERS) 和有代表性的参数分布实验。只有提前聚合能稳定减少行数和延迟、且不引入计划抖动时才偏离默认值。

  • OLAP分析与批处理

    测试确有预聚合机会的连接,并覆盖新旧统计信息与落盘压力;比较总 CPU、峰值内存、中间行数和并行计划,而不只看一次耗时。

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

    在定位出可复现回归前保持规划器开关与阈值默认。先修复基数统计;全局强制路径常会用一个查询的收益换来更多回归。

常见问题

  • 把 min_eager_agg_group_size 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 user context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

演化历史

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

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 19 ← 18 新增此参数

    PostgreSQL 19 起可用

逐版本快照

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

版本 默认值单位上下文类型最小值最大值枚举值
19 8 会话 浮点 0 1.79769e+308
20 沿用 8 会话 浮点 0 1.79769e+308

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Query Tuning 查询规划 15 个
规划器代价常量 15
cpu_index_tuple_cost 浮点 会话 0.005
设置规划器处理每个索引条目的成本估计。 现存
cpu_operator_cost 浮点 会话 0.0025
设置规划器执行每个操作符或函数调用的成本估计。 现存
cpu_tuple_cost 浮点 会话 0.01
设置规划器处理每个元组(行)的成本估计。 现存
effective_cache_size 整数 会话 4 GiB (524288 × 8kB) 9.41 次
设置规划器对有效数据缓存总规模的假设。 现存
jit_above_cost 浮点 会话 100000
设置启用 JIT 编译的查询成本阈值。 现存
jit_inline_above_cost 浮点 会话 500000
设置 JIT 尝试内联的查询成本阈值。 现存
jit_optimize_above_cost 浮点 会话 500000
设置 JIT 执行昂贵优化的查询成本阈值。 现存
min_eager_agg_group_size 浮点 会话 8
设置考虑提前聚合所需的最小平均分组大小。 现存
min_parallel_index_scan_size 整数 会话 512 KiB (64 × 8kB)
设置考虑并行索引扫描所需的最小索引数据量。 现存
min_parallel_relation_size 整数 会话 8 MiB (1024 × 8kB)
设置可考虑并行扫描的关系最小尺寸。 于 10 移除
min_parallel_table_scan_size 整数 会话 8 MiB (1024 × 8kB)
设置考虑并行表扫描所需的最小表数据量。 现存
parallel_setup_cost 浮点 会话 1000
设置规划器启动并行工作进程的成本估计。 现存
parallel_tuple_cost 浮点 会话 0.1
设置把每行从并行 worker 传给 leader 的成本估计。 现存
random_page_cost 浮点 会话 4
设置规划器对非顺序读取页面的相对成本估计。 现存
seq_page_cost 浮点 会话 1
设置规划器顺序读取磁盘页面的成本估计。 现存