CONFIGURATION PARAMETER资源消耗 / 磁盘
file_extend_method
选择扩展数据文件的方法。
Selects the method used for extending data files.
枚举 重载生效 引入 16 现存至 20 devel 0 次默认值变更
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
默认值自 PostgreSQL 16 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
本版译文与 PostgreSQL 16 完全一致,下面就是同一段文字。
指定在诸如COPY这类批量操作期间扩展数据文件时所使用的方法。 默认会根据操作系统选择第一个可用选项:
posix_fallocate(Unix)使用标准 POSIX 接口分配磁盘空间,但某些系统缺少该接口。 如果接口存在但底层文件系统不支持,本选项会静默回退到write_zeros。 已知当前版本的 BTRFS 在使用该选项时会禁用压缩。 在提供该函数的系统上,这是默认值。write_zeros通过写出零字节块来扩展文件。 在不提供posix_fallocate函数的系统上,这是默认值。
当数据文件扩展的块数不超过 8 个时,总是使用write_zeros方法。
机制详解
file_extend_method 选择 PostgreSQL 批量扩展关系文件的方法:可用时使用 posix_fallocate,否则显式写零;扩展不超过八个块时仍使用写零。
第一个受支持方法依平台而定。posix_fallocate 可在不逐块写入时预留空间,但文件系统不支持时会静默回退;当前 BTRFS 上它可能关闭该文件的压缩。
它影响空间分配方式与批量写延迟,不改变 WAL 持久性。空间预留、稀疏文件、压缩与写时复制语义都依文件系统而异。其 SIGHUP 上下文允许通过重载配置生效,无需重启服务器。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
除非操作系统支持与受控基准证明需要修改,否则让 file_extend_method 保持探测/默认值;必须在完全相同的内核与文件系统上验证启动和恢复。
-
OLAP分析与批处理
大分配或批量 I/O 可能放大 file_extend_method 的影响,但平台能力是第一道门槛。应在生产等价存储上测试,并包含失败与回退行为。
-
小规格低配实例与开发机
小型或异构机器群上,除非解决已验证的平台问题,否则避免非默认 file_extend_method;可移植性与可靠启动通常比推测收益更重要。
常见问题
- 修改 file_extend_method 时忽略文档单位与配置生效上下文。
- 只优化孤立基准,却忽略并发后的资源总量。
- 认为配置值能够保证操作系统或存储层实际行为。
- 修改后没有重新验证启动、故障转移与负载延迟。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 16 ← 15 新增此参数
PostgreSQL 16 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 16 | posix_fallocate |
— |
重载生效 |
枚举 |
— |
— |
posix_fallocate, write_zeros |
| 17 | posix_fallocate |
— |
重载生效 |
枚举 |
— |
— |
posix_fallocate, write_zeros |
| 18 | posix_fallocate |
— |
重载生效 |
枚举 |
— |
— |
posix_fallocate, write_zeros |
| 19 | posix_fallocate |
— |
重载生效 |
枚举 |
— |
— |
posix_fallocate, write_zeros |
| 20 沿用 | posix_fallocate |
— |
重载生效 |
枚举 |
— |
— |
posix_fallocate, write_zeros |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 磁盘 4 | |||||
file_copy_method |
枚举 | 会话 | copy |
— | |
| 选择数据库文件的复制方法。 | 现存 | ||||
file_extend_method |
枚举 | 重载生效 | posix_fallocate |
— | |
| 选择扩展数据文件的方法。 | 现存 | ||||
max_notify_queue_pages |
整数 | 重启生效 | 1048576 |
— | |
| 设置 LISTEN/NOTIFY 队列最多分配的页面数。 | 现存 | ||||
temp_file_limit |
整数 | 会话(超级用户) | -1 kB |
— | |
| 限制每个 PostgreSQL 进程使用的全部临时文件总大小。 | 现存 | ||||