Руководство по выбору кэширования PostgreSQL

«Добавьте кэш» может означать несколько разных изменений. Кэширование страниц PostgreSQL, подготовленный SQL, кэш целых строк, материализованное представление и Redis исключают разные части чтения. Отталкивайтесь от повторяющейся работы в запросе, затем измерьте полный путь по руководству по бенчмаркам.

Начните с повторяющейся работы

Потребность Первый вариант Что меняется
Сохранять страницы таблиц и индексов горячими PostgreSQL shared_buffers и кэш ОС Меньше чтений хранилища; SQL всё равно выполняется
Многократно отправлять один оператор Подготовленный оператор Меньше повторного разбора и планирования; выполнение продолжается
Возвращать целые строки по первичному ключу SQL mget pg_local_cache Повторно использует подходящие полезные нагрузки целых строк через явный API
Предварительно вычислять соединение или агрегат Материализованное представление Читает сохранённые результаты; обновление определяет свежесть
Разделять объекты приложения между сервисами Внешний кэш, например Redis Ключи, TTL и инвалидация управляются приложением

Страницы и подготовленный SQL

shared_buffers хранит страницы базы данных, а не окончательные результаты SELECT. Горячая страница может убрать ввод-вывод хранилища, но PostgreSQL всё ещё планирует или выполняет запрос, проверяет видимость и строит результат. Подготовленный оператор может убрать повторный разбор и анализ в одном сеансе. Он всё равно выполняется над текущим состоянием базы данных, а его план может быть общим или пользовательским.

В сравнении кэша строк показана работа, остающаяся на каждом пути.

Целые строки по первичному ключу

pg_local_cache хранит сериализованные целые строки под полными первичными ключами в ограниченной общей памяти PostgreSQL. Доступ выполняется через local_cache.mget('public.items'::regclass, $1::bigint[]); обычный SELECT никогда не обращается к этому кэшу. Подходящие чистые чтения READ COMMITTED могут попасть в кэш, тогда как более строгие уровни изоляции, записи в транзакции, восстановление, параллельное выполнение или слишком большие строки используют PostgreSQL. Неподдерживаемые сопоставления таблиц отклоняются при подключении. Это конкретный путь чтения, а не произвольный кэш результатов запросов. См. руководство по пакетному чтению, технический контракт и проверки транзакций.

Представления и внешние кэши

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

Внешний кэш, например Redis, подходит для объектов приложения, общих для нескольких процессов или сервисов. Приложение владеет ключами, сериализацией, TTL и инвалидацией. См. руководство по Redis cache-aside. Quickstart запускает pg_local_cache на public.items.

Обновлено .