Используйте PostgreSQL pg_prewarm для сторонней таблицы - PullRequest
0 голосов
/ 16 октября 2018

У меня есть много внешних таблиц, импортированных с помощью IMPORT FOREIGN SCHEMA:

CREATE USER MAPPING FOR myuser
   SERVER postgres
   OPTIONS ( user 'myuser', password 'mypass');
IMPORT FOREIGN SCHEMA public from server postgres INTO public;

У меня есть много запросов, которые объединяют мои локальные таблицы и внешние таблицы.

Q1: Если я использую pg_prewarmи поместить всю таблицу в память, это помогает мне не каждый раз брать эту таблицу по сети.

Q2: Я беспокоюсь, если изменения данных на стороннем сервере PostgreSQL будут видны на моем локальном сервере, есливнешняя таблица кэшируется.

Пример: core_category является внешней таблицей

SELECT pg_prewarm(
    'core_category',
    -- "pre warm" pages of the last 1000 pages for 'mytable'
    first_block := (
        SELECT pg_relation_size('core_category') / current_setting('block_size')::int4 - 1000
    )
);
-- or
SELECT * FROM pg_prewarm('core_category', 'buffer');

1 Ответ

0 голосов
/ 16 октября 2018

Использование pg_prewarm для сторонней таблицы не имеет смысла: поскольку таблица не хранится в PostgreSQL, PostgreSQL не может загрузить ее в общие буферы или кэш файловой системы.

Действительно, попытка сделать это приведет к

ERROR: fork "main" does not exist for this relation

. Чтобы ускорить запросы с использованием внешней таблицы, вам нужно будет получить внешний источник данных для кэширования данных в памяти.

...