pg_prewarm

预热关系数据

概览

扩展包名版本分类许可证语言
pg_prewarm1.2ADMINPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
5890pg_prewarm-
相关扩展pgfincore pg_cooldown pgcozy pg_buffercache pg_repack pg_rewrite pg_squeeze old_snapshot

版本

PG18PG17PG16PG15PG14
1.21.21.21.21.2

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION pg_prewarm;

用法

pg_prewarm: 预热关系数据

pg_prewarm 扩展提供将关系数据加载到操作系统缓冲区缓存或 PostgreSQL 缓冲区缓存的函数,减少后续查询的 I/O 延迟。

预热关系

-- 将整个表加载到 PostgreSQL 缓冲区缓存(默认模式)
SELECT pg_prewarm('my_table');

-- 使用特定模式加载
SELECT pg_prewarm('my_table', 'prefetch');  -- 异步 OS 预取
SELECT pg_prewarm('my_table', 'read');      -- 同步读入 OS 缓存
SELECT pg_prewarm('my_table', 'buffer');    -- 加载到 PG 缓冲区缓存

-- 加载特定块范围
SELECT pg_prewarm('my_table', 'buffer', 'main', 0, 999);

-- 预热索引
SELECT pg_prewarm('my_table_pkey');

函数签名

pg_prewarm(regclass,
           mode text DEFAULT 'buffer',
           fork text DEFAULT 'main',
           first_block int8 DEFAULT NULL,
           last_block int8 DEFAULT NULL
) RETURNS int8

返回预热的块数。

参数描述
modeprefetch(异步 OS)、read(同步 OS)或 buffer(PG 缓存)
fork要预热的关系分支(例如 mainfsmvm
first_block起始块号(默认:0)
last_block结束块号(默认:关系的最后一个块)

自动预热

通过 shared_preload_libraries 加载时,自动预热会定期将共享缓冲区缓存中的缓冲区列表保存到磁盘,并在重启时恢复。

-- 手动启动自动预热工作进程
SELECT autoprewarm_start_worker();

-- 强制立即转储缓冲区状态
SELECT autoprewarm_dump_now();  -- 返回写入的记录数

GUC 参数

参数默认值描述
pg_prewarm.autoprewarmtrue启用自动预热后台工作进程
pg_prewarm.autoprewarm_interval300sautoprewarm.blocks 文件更新间隔(0 = 仅在关闭时转储)

缓冲区状态保存到数据目录中的 autoprewarm.blocks 文件。重启后,两个后台工作进程会重新加载保存的缓冲区。


最后修改 2026-03-12: update extension pages (f579993)