min_parallel_table_scan_size
min_parallel_table_scan_size:设置考虑并行表扫描所需的最小表数据量。实测在档范围为 PG10–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 8 MiB (1024 × 8kB),context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明
Fact — 官方简述译文:设置考虑并行表扫描所需的最小表数据量。
身份
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG10 |
| 在档版本 | PG10–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 51ee6f3160d2 — Replace min_parallel_relation_size with two new GUCs. |
| 提交日期 | 2017-02-15 |
| Discussion | 讨论 1 · 讨论 2 |
默认值变迁
| 版本 | 原始 boot_val |
单位 | 人类可读值 |
|---|---|---|---|
| PG10–19 Beta 3 | 1024 |
8kB |
8 MiB (1024 × 8kB) |
机制详解
min_parallel_table_scan_size 是规划器的候选资格下限:只有预计会扫描的表数据量达到配置规模时,才会考虑并行扫描路径。
越过该下限并不保证产生并行计划。规划器仍会比较成本、检查并行安全性,并受 max_parallel_workers_per_gather 与集群 worker 池约束。
对并行顺序扫描,估算量通常是整个关系大小。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。
调优建议
提示
Advice。 以下建议是工作负载起点,必须用真实测量验证。
| 场景 | 建议 |
|---|---|
| OLTP | 提高 min_parallel_table_scan_size 可减少短 OLTP 扫描启动并行,但要确认报表与维护任务没有回归。Pigsty 的 OLTP/crit 取值是规划策略偏好,并非资源上限。 |
| OLAP | 除非较小但昂贵的扫描被错误排除,否则保留上游阈值。降低 min_parallel_table_scan_size 会在大量并发查询时增加规划与 worker 开销。 |
| 小规格 | 小主机上 worker 启动与内存竞争更突出,宜采用保守或更高阈值,并与 max_parallel_workers_per_gather 联动,而不是单独调整。 |
Pigsty 取值
以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具,并按 PG19 Beta 3 渲染当前 Pigsty 模板;这不表示 Pigsty 当前支持该历史或测试版本。
| 模板 | 有效值 | 与上游 boot 比较 | 源表达式 |
|---|---|---|---|
| OLTP | 32MB |
不同于 boot 值 | 32MB |
| OLAP | 未修改 | — | — |
| CRIT | 32MB |
不同于 boot 值 | 32MB |
| TINY | 未修改 | — | — |
注意
Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG10–19 Beta 3 = 32MB (dcs);OLAP: PG10–19 Beta 3 未修改;CRIT: PG10–19 Beta 3 = 32MB (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_seqscan