跳转到主要内容

random_page_cost

这是描述非顺序页面访问相对顺序访问成本的规划器常量。降低它会让索引和位图访问路径显得更便宜,但不会改变存储系统本身的行为。
说明

Fact — 官方简述译文:设置规划器对非顺序读取页面的相对成本估计。

身份

类型 , real
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 01.79769e+308
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Query Tuning / Planner Cost Constants
上游分类
最后 boot 值 , 4
4

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 4 4

机制详解

规划器成本单位是任意尺度,主要看各成本常量之间的相对关系。seq_page_cost 通常约定为 1.0,random_page_cost 则在考虑缓存命中与存储特性后描述随机访问的平均惩罚。

相对 seq_page_cost 降低本值会偏向索引扫描,提高则会让索引扫描显得更贵。两者都可按 tablespace 覆盖,适合一个集群存在多种存储层级的情况。

官方建议把这些常量视为整个查询组合的平均模型,并警告不要根据少量实验贸然修改。执行计划还受统计信息、effective_cache_size、数据相关性和查询形态影响。

调优建议

提示

Advice。 以下建议是工作负载起点,必须用真实测量验证。

场景 建议
OLTP 低延迟 SSD 且缓存命中率高时,1.1 可作为试验起点而非普遍真理;上线前比较代表性 EXPLAIN (ANALYZE, BUFFERS) 与尾延迟。
OLAP 不要仅因使用 SSD 就降低它;分析查询仍可能适合顺序扫描。应依据完整的扫描与索引访问组合校准,并考虑 tablespace 级设置。
小规格 若数据库通常完全驻留缓存,可考虑接近 seq_page_cost 的值;不要设得更低,并应先排除统计信息陈旧造成的错误计划。

Pigsty 取值

以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具,并按 PG19 Beta 3 渲染当前 Pigsty 模板;这不表示 Pigsty 当前支持该历史或测试版本。

模板 有效值 与上游 boot 比较 源表达式
OLTP 1.1 不同于 boot 值 1.1
OLAP 1.1 不同于 boot 值 1.1
CRIT 1.1 不同于 boot 值 1.1
TINY 1.1 不同于 boot 值 1.1
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 1.1 (dcs);OLAP: PG9.0–19 Beta 3 = 1.1 (dcs);CRIT: PG9.0–19 Beta 3 = 1.1 (dcs);TINY: PG9.0–19 Beta 3 = 1.1 (dcs)。 建议(待人工复核)——编辑推断(待维护者复核):1.1 用于刻画 SSD 与高缓存命中环境中随机访问更接近顺序访问的成本。

常见坑

  • 该数值是相对规划成本,不是毫秒或设备实测延迟。
  • 为修复单条查询而降低它可能伤害整体负载。
  • 基数估算错误常被误认为存储成本参数错误。
  • 低于 seq_page_cost 通常不符合物理直觉。
  • 全局值可能无法表示 SSD、HDD、网络存储混合的 tablespace。

seq_page_cost · effective_cache_size · effective_io_concurrency · default_statistics_target · enable_indexscan · enable_bitmapscan

参考资料