pg_prewarm module provides a
convenient way to load relation data into either the operating
system buffer cache or the PostgreSQL buffer cache. Prewarming can be
performed manually using the
pg_prewarm function, or can be performed
automatically by including
pg_prewarm in shared_preload_libraries.
In the latter case, the system will run a background worker which
periodically records the contents of shared buffers in a file
autoprewarm.blocks and will,
using 2 background workers, reload those same blocks after a
pg_prewarm(regclass, mode text default 'buffer', fork text default 'main', first_block int8 default null, last_block int8 default null) RETURNS int8
The first argument is the relation to be prewarmed. The
second argument is the prewarming method to be used, as further
discussed below; the third is the relation fork to be
fourth argument is the first block number to prewarm
NULL is accepted as a synonym for
zero). The fifth argument is the last block number to prewarm
NULL means prewarm through the
last block in the relation). The return value is the number of
There are three available prewarming methods.
prefetch issues asynchronous prefetch requests
to the operating system, if this is supported, or throws an
read reads the
requested range of blocks; unlike
prefetch, this is synchronous and supported on
all platforms and builds, but may be slower.
buffer reads the requested range of blocks
into the database buffer cache.
Note that with any of these methods, attempting to prewarm
more blocks than can be cached — by the OS when using
read, or by PostgreSQL when using
buffer — will likely result in lower-numbered
blocks being evicted as higher numbered blocks are read in.
Prewarmed data also enjoys no special protection from cache
evictions, so it is possible that other system activity may
evict the newly prewarmed blocks shortly after they are read;
conversely, prewarming may also evict other data from cache.
For these reasons, prewarming is typically most useful at
startup, when caches are largely empty.
autoprewarm_start_worker() RETURNS void
Launch the main autoprewarm worker. This will normally happen automatically, but is useful if automatic prewarm was not configured at server startup time and you wish to start up the worker at a later time.
autoprewarm_dump_now() RETURNS int8
immediately. This may be useful if the autoprewarm worker is
not running but you anticipate running it after the next
restart. The return value is the number of records written to
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.