enable_async_append
是一个 配置参数,用于确定查询规划器是否使用异步感知的追加计划类型。
enable_async_append
在 PostgreSQL 14 中添加。
默认值
enable_async_append
的默认值为:on
。
按 PostgreSQL 版本查看详情
enable_async_append (PostgreSQL 17)
设置 | on |
单位 | |
类别 | 查询调优 / 规划器方法配置 |
简短描述 | 启用规划器使用异步追加计划。 |
额外描述 | |
上下文 | 用户 |
变量类型 | bool |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | on |
重置值 | on |
源文件 | |
源代码行号 | |
待重启 | false |
enable_async_append (PostgreSQL 16)
设置 | on |
单位 | |
类别 | 查询调优 / 规划器方法配置 |
简短描述 | 启用规划器使用异步追加计划。 |
额外描述 | |
上下文 | 用户 |
变量类型 | bool |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | on |
重置值 | on |
源文件 | |
源代码行号 | |
待重启 | false |
enable_async_append (PostgreSQL 15)
设置 | on |
单位 | |
类别 | 查询调优 / 规划器方法配置 |
简短描述 | 启用规划器使用异步追加计划。 |
额外描述 | |
上下文 | 用户 |
变量类型 | bool |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | on |
重置值 | on |
源文件 | |
源代码行号 | |
待重启 | false |
enable_async_append (PostgreSQL 14)
设置 | on |
单位 | |
类别 | 查询调优 / 规划器方法配置 |
简短描述 | 启用规划器使用异步追加计划。 |
额外描述 | |
上下文 | 用户 |
变量类型 | bool |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | on |
重置值 | on |
源文件 | |
源代码行号 | |
待重启 | false |
更改历史
- PostgreSQL 14
- 添加 (提交 27e1f145)
示例
假设一个分区表设置如下
postgres=# \d+ parttest Partitioned table "public.parttest" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+---------+-----------+----------+---------+----------+-------------+--------------+------------- id | integer | | not null | | plain | | | val1 | text | | | | extended | | | val2 | text | | | | extended | | | Partition key: HASH (id) Partitions: parttest_4_0 FOR VALUES WITH (modulus 4, remainder 0), parttest_4_1 FOR VALUES WITH (modulus 4, remainder 1), parttest_4_2 FOR VALUES WITH (modulus 4, remainder 2), parttest_4_3 FOR VALUES WITH (modulus 4, remainder 3)
其中各个分区是位于不同服务器上的 外部表,则以下查询应生成如下计划
postgres=# EXPLAIN (verbose, analyze) select * FROM parttest; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------ Append (cost=100.00..4345.00 rows=100000 width=68) (actual time=2.067..145.652 rows=100000 loops=1) -> Async Foreign Scan on public.parttest_4_0 parttest_1 (cost=100.00..965.78 rows=25126 width=68) (actual time=1.104..29.017 rows=25126 loops=1) Output: parttest_1.id, parttest_1.val1, parttest_1.val2 Remote SQL: SELECT id, val1, val2 FROM public.parttest_4_0 -> Async Foreign Scan on public.parttest_4_1 parttest_2 (cost=100.00..960.34 rows=24978 width=68) (actual time=1.057..26.778 rows=24978 loops=1) Output: parttest_2.id, parttest_2.val1, parttest_2.val2 Remote SQL: SELECT id, val1, val2 FROM public.parttest_4_1 -> Async Foreign Scan on public.parttest_4_2 parttest_3 (cost=100.00..960.13 rows=24971 width=68) (actual time=0.319..15.856 rows=24971 loops=1) Output: parttest_3.id, parttest_3.val1, parttest_3.val2 Remote SQL: SELECT id, val1, val2 FROM public.parttest_4_2 -> Async Foreign Scan on public.parttest_4_3 parttest_4 (cost=100.00..958.75 rows=24925 width=68) (actual time=0.284..17.054 rows=24925 loops=1) Output: parttest_4.id, parttest_4.val1, parttest_4.val2 Remote SQL: SELECT id, val1, val2 FROM public.parttest_4_3 Query Identifier: 5644017674074468972 Planning Time: 0.642 ms Execution Time: 152.617 ms (16 rows)
参考文献
- PostgreSQL 文档: enable_async_append
有用链接
- PG-14 中 postgres_fdw 扫描的并行执行 - 2021 年 6 月 Ahsan Hadi / HighGo 的博文