选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 预写式日志

CONFIGURATION PARAMETER预写式日志 / 恢复

recovery_prefetch

在恢复期间预取 WAL 引用的数据块。

Prefetch referenced blocks during recovery.

枚举 重载生效 引入 15 现存至 20 devel 0 次默认值变更

类型
枚举enum
上下文
重载生效改配置文件后重载(pg_ctl reload / SIGHUP)即可生效
默认值
try
枚举值
off, on, try
引入版本
15
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 1d257577e0

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

try 15 – 20

默认值自 PostgreSQL 15 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.5 预写式日志 本站手册 官方原文

是否在恢复期间尝试预取在WAL中引用但尚未在缓冲池中的块。有效值为 offontry(默认值)。设置 try仅在操作系统提供 posix_fadvise函数时才启用 预取,该函数目前用于实现预取。请注意,一些操作系统提供该 函数,但它不起作用。

预取即将需要的块可以减少某些工作负载下恢复期间的I/O等待时间。 另请参阅wal_decode_buffer_sizemaintenance_io_concurrency设置,限制预取活动。

机制详解

在恢复期间预取 WAL 引用的数据块。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

它位于 WAL 生成、写出、检查点、归档与恢复链路中;实际效果还受 wal_level、检查点节奏、持久化设置与存储语义影响。只观察单一参数不足以证明耐久性或恢复能力。

应把 recovery_prefetch 与 wal_decode_buffer_size、maintenance_io_concurrency、effective_io_concurrency 一起监控和变更。先在对应角色与真实负载上验证,再按其 sighup context 选择会话修改、reload 或 restart;历史默认值并不等于当前有效值。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    在与生产相同的存储上用恢复/备库追赶基准调 recovery_prefetch,同时观察 replay I/O wait、缓存命中与 maintenance_io_concurrency;没有测量收益就保留默认。

  • OLAP分析与批处理

    大型数据集且随机读取较慢时可能收益更大,但过度预取会挤占查询 I/O 与缓存;在故障恢复与读备库两种场景分别测试。

  • 小规格低配实例与开发机

    默认通常足够。内存与 I/O 队列有限时,不要为扩大超前窗口占用资源,除非恢复时间目标有明确缺口。

常见问题

  • 误以为 try 在操作系统不支持所需 read-ahead advice 时也一定启用预取。
  • 扩大超前读取,却不考虑 wal_decode_buffer_size 与 maintenance_io_concurrency。
  • 让恢复预取与 hot standby 查询争夺缓存和 I/O 队列深度。
  • 只测试顺序恢复场景,而该场景的块预取收益可能很小。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 15 ← 14 新增此参数

    PostgreSQL 15 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
15 try 重载生效 枚举 off, on, try
16 try 重载生效 枚举 off, on, try
17 try 重载生效 枚举 off, on, try
18 try 重载生效 枚举 off, on, try
19 try 重载生效 枚举 off, on, try
20 沿用 try 重载生效 枚举 off, on, try

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Write-Ahead Log 预写式日志 2 个
恢复 2
recovery_prefetch 枚举 重载生效 try
在恢复期间预取 WAL 引用的数据块。 现存
wal_decode_buffer_size 整数 重启生效 512 KiB
设置恢复期间超前读取 WAL 的缓冲区大小。 现存