min_parallel_table_scan_size 是一个 配置参数,用于指定需要扫描的表数据的最小量,以决定是否考虑并行扫描。
min_parallel_table_scan_size 在 PostgreSQL 10 中被添加。它与 min_parallel_index_scan_size 一起,取代了 min_parallel_relation_size。
默认
min_parallel_table_scan_size 的默认值为:8MB。
按 PostgreSQL 版本详细信息
min_parallel_table_scan_size (PostgreSQL 19)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 18)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 17)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 16)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 15)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 14)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 13)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 12)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 11)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
min_parallel_table_scan_size (PostgreSQL 10)
| 设置 |
1024 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小表数据量。 |
| 扩展描述 |
如果优化器估计扫描的表页数不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
1024 |
| 重置值 |
1024 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_table_scan_size
变更历史
示例
min_parallel_table_scan_size 的演示示例
postgres=# CREATE TABLE foo (id int, val text);
CREATE TABLE
postgres=# INSERT INTO foo VALUES(generate_series(1,100000), clock_timestamp());
INSERT 0 100000
此时,表 foo 包含的数据少于 8MB,因此没有启动并行扫描
postgres=# \dt+ foo
List of tables
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+------+-------+----------+-------------+---------------+---------+-------------
public | foo | table | postgres | permanent | heap | 6704 kB |
(1 row)
postgres=# EXPLAIN ANALYZE SELECT * FROM foo WHERE id % 2 = 1;
QUERY PLAN
--------------------------------------------------------------------------------------------------------
Seq Scan on foo (cost=0.00..2334.00 rows=500 width=33) (actual time=0.018..18.427 rows=50000 loops=1)
Filter: ((id % 2) = 1)
Rows Removed by Filter: 50000
Buffers: shared hit=834
Planning Time: 0.054 ms
Execution Time: 21.612 ms
(6 rows)
插入更多数据后,表大小超过 8MB,则会启动并行扫描
postgres=# INSERT INTO foo values(generate_series(100001,200000), clock_timestamp());
INSERT 0 100000
postgres=# \dt+ foo
List of tables
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+------+-------+----------+-------------+---------------+-------+-------------
public | foo | table | postgres | permanent | heap | 13 MB |
(1 row)
postgres=# EXPLAIN ANALYZE SELECT * FROM foo WHERE id % 2 = 1;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
Gather (cost=1000.00..4530.55 rows=999 width=33) (actual time=0.905..32.689 rows=100000 loops=1)
Workers Planned: 1
Workers Launched: 1
Buffers: shared hit=1667
-> Parallel Seq Scan on foo (cost=0.00..3430.65 rows=588 width=33) (actual time=0.021..18.552 rows=50000 loops=2)
Filter: ((id % 2) = 1)
Rows Removed by Filter: 50000
Buffers: shared hit=1667
Planning Time: 0.138 ms
Execution Time: 37.802 ms
(10 rows)