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)