min_parallel_index_scan_size 是一个配置参数,用于指定在考虑并行扫描之前,需要扫描的最小索引数据量。
min_parallel_index_scan_size 已在 PostgreSQL 10 中添加。它与 min_parallel_table_scan_size 一起,取代了 min_parallel_relation_size。
默认
min_parallel_index_scan_size 的默认值为:512kB。
按 PostgreSQL 版本详细信息
min_parallel_index_scan_size (PostgreSQL 19)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 18)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 17)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 16)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 15)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 14)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 13)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 12)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 11)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
min_parallel_index_scan_size (PostgreSQL 10)
| 设置 |
64 |
| 单位 |
8kB |
| 类别 |
查询调优 / 优化器成本常量 |
| 简短描述 |
设置并行扫描的最小索引数据量。 |
| 扩展描述 |
如果规划器估计它读取的索引页数量不足以达到此限制,则不会考虑并行扫描。 |
| 上下文 |
user |
| 变量类型 |
整数 |
| 来源 |
默认 |
| 最小值 |
0 |
| 最大值 |
715827882 |
| 枚举值 |
|
| 启动值 |
64 |
| 重置值 |
64 |
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档: min_parallel_index_scan_size
变更历史
示例
min_parallel_index_scan_size 的基本用法示例
postgres=# CREATE TABLE foo (id INT);
CREATE TABLE
postgres=# CREATE UNIQUE INDEX foo_ix ON foo(id);
CREATE INDEX
postgres=# INSERT INTO foo VALUES (generate_series(1,1000));
INSERT 0 1000
此时创建的索引远小于 min_parallel_index_scan_size,因此不使用并行扫描
postgres=# \di+ foo_ix
List of indexes
Schema | Name | Type | Owner | Table | Persistence | Access method | Size | Description
--------+--------+-------+----------+-------+-------------+---------------+-------+-------------
public | foo_ix | index | postgres | foo | permanent | btree | 40 kB |
(1 row)
postgres=# EXPLAIN SELECT * FROM foo WHERE id % 2 = 1;
QUERY PLAN
----------------------------------------------------
Seq Scan on foo (cost=0.00..20.00 rows=5 width=4)
Filter: ((id % 2) = 1)
(2 rows)
一旦索引大小超过 min_parallel_index_scan_size,将启动并行扫描
postgres=# INSERT INTO foo VALUES (generate_series(1001,1000000));
INSERT 0 999000
postgres=# \di+ foo_ix
List of indexes
Schema | Name | Type | Owner | Table | Persistence | Access method | Size | Description
--------+--------+-------+----------+-------+-------------+---------------+-------+-------------
public | foo_ix | index | postgres | foo | permanent | btree | 21 MB |
(1 row)
postgres=# EXPLAIN SELECT * FROM foo WHERE id % 2 = 1;
QUERY PLAN
-------------------------------------------------------------------------
Gather (cost=1000.00..12653.00 rows=5000 width=4)
Workers Planned: 2
-> Parallel Seq Scan on foo (cost=0.00..11153.00 rows=2083 width=4)
Filter: ((id % 2) = 1)
(4 rows)