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

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

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

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 18 手册 官方文档 引入提交 3bd909b220

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

0.1 9.6 – 20

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

手册说明

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

本版译文与 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 更重要。

常见问题

  • 把数值解释为实际耗时或硬资源上限。
  • 为修复单条查询而调整,导致更广泛负载回归。
  • 在修正统计信息与基数估计之前先改成本常量。
  • 忘记只有各成本项的相对值会影响路径选择。

演化历史

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

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. 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.

  3. 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

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
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
设置规划器顺序读取磁盘页面的成本估计。 现存