F.37. pg_prewarm — предварительная загрузка данных отношения в буферные кэши#
F.37. pg_prewarm — предварительная загрузка данных отношения в буферные кэши #
Модуль pg_prewarm
предоставляет удобный способ загрузки данных отношений в кеш операционной системы или кеш Tantor BE. Предварительная загрузка может выполняться вручную с помощью функции pg_prewarm
или автоматически путем включения pg_prewarm
в shared_preload_libraries. В последнем случае система будет запускать фоновый рабочий процесс, который периодически записывает содержимое общих буферов в файл с именем autoprewarm.blocks
и, используя 2 фоновых процесса, повторно загружает эти же блоки после перезагрузки.
F.37.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
, или Tantor BE при использовании buffer
- скорее всего приведет к вытеснению блоков с меньшими номерами при чтении блоков с более высокими номерами. Предварительно прогретые данные также не пользуются особыми механизмами защиты от вытеснения из кеша, поэтому возможно, что другая системная активность может вытеснить недавно прогретые блоки вскоре после их чтения; наоборот, предварительный прогрев также может вытеснить другие данные из кеша. По этим причинам предварительный прогрев обычно наиболее полезен при запуске, когда кеши в основном пусты.
autoprewarm_start_worker() RETURNS void
Запустите основной рабочий процесс автоматической предварительной загрузки. Обычно это происходит автоматически, но может быть полезно, если автоматическая предварительная загрузка не была настроена при запуске сервера и нужно запустить рабочий процесс позже.
autoprewarm_dump_now() RETURNS int8
Обновите файл autoprewarm.blocks
немедленно. Это может быть полезно, если рабочий процесс автоматической предварительной загрузки не запущен, но вы планируете запустить его после следующей перезагрузки. Возвращаемое значение - количество записей, записанных в файл autoprewarm.blocks
.
F.37.2. Параметры конфигурации #
Эти параметры должны быть установлены в файле postgresql.conf
.
Обычное использование может быть таким:
# postgresql.conf shared_preload_libraries = 'pg_prewarm' pg_prewarm.autoprewarm = true pg_prewarm.autoprewarm_interval = 300s
F.37.3. Автор #
Robert Haas <rhaas@postgresql.org>