跳转到主要内容

min_parallel_index_scan_size

min_parallel_index_scan_size:设置考虑并行索引扫描所需的最小索引数据量。实测在档范围为 PG10–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 512 KiB (64 × 8kB),context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置考虑并行索引扫描所需的最小索引数据量。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 , 8kB
原始单位
范围 , 0715827882
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Query Tuning / Planner Cost Constants
上游分类
最后 boot 值 , 64
512 KiB (64 × 8kB)

生命周期

Fact
首次观测 PG10
在档版本 PG10–19 Beta 3
移除版本
引入提交 51ee6f3160d2 — Replace min_parallel_relation_size with two new GUCs.
提交日期 2017-02-15
Discussion 讨论 1 · 讨论 2

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG10–19 Beta 3 64 8kB 512 KiB (64 × 8kB)

机制详解

min_parallel_index_scan_size 是规划器的候选资格下限:只有预计会访问的索引页面量达到配置规模时,才会考虑并行扫描路径。

越过该下限并不保证产生并行计划。规划器仍会比较成本、检查并行安全性,并受 max_parallel_workers_per_gather 与集群 worker 池约束。

索引阈值还参与判断索引能否并行 vacuum。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。

调优建议

提示

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

场景 建议
OLTP 提高 min_parallel_index_scan_size 可减少短 OLTP 扫描启动并行,但要确认报表与维护任务没有回归。Pigsty 的 OLTP/crit 取值是规划策略偏好,并非资源上限。
OLAP 除非较小但昂贵的扫描被错误排除,否则保留上游阈值。降低 min_parallel_index_scan_size 会在大量并发查询时增加规划与 worker 开销。
小规格 小主机上 worker 启动与内存竞争更突出,宜采用保守或更高阈值,并与 max_parallel_workers_per_gather 联动,而不是单独调整。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG10–19 Beta 3 = 2MB (dcs);OLAP: PG10–19 Beta 3 未修改;CRIT: PG10–19 Beta 3 = 2MB (dcs);TINY: PG10–19 Beta 3 未修改。 建议(待人工复核)——编辑推断(待维护者复核):OLTP/crit 取值提高索引并行候选下限以降低并行倾向,OLAP 与 tiny 保留上游行为。

常见坑

  • 误以为阈值限制实际读取字节;它只控制规划器候选资格。
  • 认为规模估计一越过阈值就必然产生并行计划。
  • 降低阈值却没有为并发下的 worker 与节点内存做预算。
  • 比较裸数值时忘记应用 8kB 块单位。

max_parallel_workers_per_gather · parallel_setup_cost · parallel_tuple_cost · max_parallel_workers · enable_indexscan

参考资料