F.41. pg_prewarm
Модуль pg_prewarm
предоставляет удобную возможность загружать данные отношений в кеш операционной системы или в кеш буферов Postgres Pro.
F.41.1. Функции
pg_prewarm(regclass, mode text default 'buffer', fork text default 'main', first_block int8 default null, last_block int8 default null) RETURNS int8
Первый аргумент задаёт отношение, которое будет «разогрето». Во втором указывается метод «разогрева», из описанных ниже; в третьем задаётся целевой слой отношения, обычно main
. В четвёртом аргументе можно передать номер первого разогреваемого блока (NULL
принимается как синоним нуля), а в пятом — номер последнего блока (NULL
означает последний блок отношения). Возвращает эта функция количество разогретых блоков.
Эта функция поддерживает три режима разогрева. В режиме prefetch
выдаются асинхронные запросы предвыборки данных операционной системе, если они поддерживаются, либо происходит ошибка. В режиме read
считывается заданный диапазон блоков; в отличие от prefetch
это происходит синхронно и поддерживается во всех ОС и любыми сборками, но может быть медленнее. В режиме buffer
запрошенный диапазон блоков считывается в кеш буферов базы данных.
Заметьте, что с любым из этих методов попытка разогреть больше блоков, чем может уместиться в кеше (в кеше ОС в режимах prefetch
и read
, либо в кеше Postgres Pro в режиме buffer
) скорее всего приведёт к тому, что блоки с меньшими номерами будут вытеснены из кеша при чтении последующих блоков. Кроме того, разогретые данные никаким специальным образом не защищаются от вытеснения из кеша, так что возможна ситуация, когда из-за другой активности только что разогретые блоки будут вытеснены вскоре после чтения; с другой стороны при таком разогреве из кеша могут быть вытеснены другие данные. Поэтому разогрев обычно наиболее полезен при загрузке, когда кеши в основном пусты.
F.41.2. Автор
Роберт Хаас <rhaas@postgresql.org>