CONFIGURATION PARAMETER查询规划 / 规划器代价常量
parallel_tuple_cost
设置把每行从并行 worker 传给 leader 的成本估计。
Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend.
浮点 会话 引入 9.6 现存至 20 devel 0 次默认值变更
- 类型
- 浮点real
- 上下文
- 会话任何用户都可在会话内用 SET 修改
- 默认值
0.1- 取值范围
0 – 1.79769e+308- 引入版本
- 9.6
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
默认值自 PostgreSQL 9.6 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
本版译文与 PostgreSQL 10 完全一致,下面就是同一段文字。
设置规划器对于从一个并行工作者进程传递一个元组给另一个进程的代价估计。默认是 0.1。
机制详解
parallel_tuple_cost 用于刻画把每行从并行 worker 传给另一个进程的开销。它只是路径估算成本的一项,不会直接分配资源或改变执行器行为。
规划器成本单位是任意尺度,只有比例有意义。把所有成本常量同比例缩放不会改变路径排序;只改一项则会改变 I/O、行处理、操作符与并行开销之间的权衡。
生成计划时才会读取该值。统计信息、行数估计、缓存假设、tablespace 覆盖以及可用计划方法,都可能比小幅调整这个常量影响更大。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
只应依据代表性负载校准 parallel_tuple_cost,不能依据单个计划。先修复陈旧统计,并用 EXPLAIN (ANALYZE, BUFFERS) 比较估算与实际;能按角色或 tablespace 限定时不要全局修改。
-
OLAP分析与批处理
分析负载可能需要不同的 CPU 与 I/O 权衡,但应把 parallel_tuple_cost 与相关成本模型一起调整,并验证完整的扫描、连接与聚合组合。
-
小规格低配实例与开发机
除非反复证据表明存在系统性建模偏差,否则保留上游值。小系统上并发与缓存驻留通常比细调 parallel_tuple_cost 更重要。
常见问题
- 把数值解释为实际耗时或硬资源上限。
- 为修复单条查询而调整,导致更广泛负载回归。
- 在修正统计信息与基数估计之前先改成本常量。
- 忘记只有各成本项的相对值会影响路径选择。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 14 ← 13 仅描述更新
简述
Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend.Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend. -
PostgreSQL 9.6 ← 9.5 新增此参数
PostgreSQL 9.6 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 9.6 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 10 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 11 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 12 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 13 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 14 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 15 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 16 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 17 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 18 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 19 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
| 20 沿用 | 0.1 |
— |
会话 |
浮点 |
0 |
1.79769e+308 |
— |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 规划器代价常量 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 |
— | |
| 设置规划器顺序读取磁盘页面的成本估计。 | 现存 | ||||