pg_prewarm
pg_prewarm
pg_prewarm : prewarm relation data
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 5890 | pg_prewarm | pg_prewarm | 1.2 | ADMIN | PostgreSQL | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--sLd-- | No | Yes | Yes | Yes | no | no |
| Relationships | |
|---|---|
| See Also | pgfincore pg_cooldown pgcozy pg_buffercache pg_repack pg_rewrite pg_squeeze old_snapshot |
Packages
| PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|
1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
This is a built-in contrib extension ship with the PostgreSQL kernel
Install
Config this extension to shared_preload_libraries:
shared_preload_libraries = 'pg_prewarm';Create this extension with:
CREATE EXTENSION pg_prewarm;Usage
The pg_prewarm extension provides functions to load relation data into the operating system buffer cache or PostgreSQL buffer cache, reducing I/O latency for subsequent queries.
Prewarm a Relation
-- Load entire table into PostgreSQL buffer cache (default mode)
SELECT pg_prewarm('my_table');
-- Load with specific mode
SELECT pg_prewarm('my_table', 'prefetch'); -- async OS prefetch
SELECT pg_prewarm('my_table', 'read'); -- sync read into OS cache
SELECT pg_prewarm('my_table', 'buffer'); -- load into PG buffer cache
-- Load specific block range
SELECT pg_prewarm('my_table', 'buffer', 'main', 0, 999);
-- Prewarm an index
SELECT pg_prewarm('my_table_pkey');Function Signature
pg_prewarm(regclass,
mode text DEFAULT 'buffer',
fork text DEFAULT 'main',
first_block int8 DEFAULT NULL,
last_block int8 DEFAULT NULL
) RETURNS int8Returns the number of blocks prewarmed.
| Parameter | Description |
|---|---|
mode | prefetch (async OS), read (sync OS), or buffer (PG cache) |
fork | Relation fork to prewarm (e.g., main, fsm, vm) |
first_block | First block number (default: 0) |
last_block | Last block number (default: last block of relation) |
Autoprewarm
When loaded via shared_preload_libraries, autoprewarm periodically saves the list of buffers in the shared buffer cache to disk and restores them on restart.
-- Manually launch autoprewarm worker
SELECT autoprewarm_start_worker();
-- Force immediate dump of buffer state
SELECT autoprewarm_dump_now(); -- returns number of records writtenGUC Parameters
| Parameter | Default | Description |
|---|---|---|
pg_prewarm.autoprewarm | true | Enable autoprewarm background worker |
pg_prewarm.autoprewarm_interval | 300s | Interval between autoprewarm.blocks file updates (0 = dump only at shutdown) |
Buffer state is saved to autoprewarm.blocks in the data directory. After restart, two background workers reload the saved buffers.
Last updated on