min_parallel_table_scan_size

一个 GUC 参数,用于确定是否应考虑并行表扫描

min_parallel_table_scan_size 是一个 配置参数,用于指定需要扫描的表数据的最小量,以决定是否考虑并行扫描。

min_parallel_table_scan_sizePostgreSQL 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)

分类

GUC 配置项, 并行查询, 优化器

另请参阅

min_parallel_index_scan_size

反馈

提交关于“min_parallel_table_scan_size”的任何评论、建议或更正请在此处 提交