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

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

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

Потребность Вариант Какую работу позволяет избежать
Держать страницы таблиц и индексов в памяти shared_buffers PostgreSQL и кэш ОС Чтение с диска; SQL-запрос всё равно выполняется
Повторно выполнять оператор в одном сеансе Подготовленный оператор Повторный разбор и анализ
Читать целые строки по первичному ключу Аутентифицированный RESP MGET через pg_local_cache Чтение подходящих целых строк из источника
Повторно использовать соединения или агрегаты Материализованное представление Пересчёт сохранённого результата запроса до его обновления
Использовать общие объекты в нескольких сервисах Redis cache-aside Чтение из источника, управляемое приложением

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

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

Оставшаяся работа в каждом пути описана в статье «Кэш строк и shared_buffers».

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

pg_local_cache хранит целые строки в ограниченной общей памяти PostgreSQL. Аутентифицированная команда RESP MGET может вернуть подходящую строку из кэша; обычный SQL этот кэш не использует. При промахе или неподходящем для кэширования чтении запрос выполняется по исходной таблице. Конечная точка использует одну настроенную роль базы данных и не разделяет SQL-транзакцию или снимок вызывающей стороны. См. руководство по пакетным запросам, технический справочник и руководство по инвалидации.

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

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

Redis подходит для объектов приложения, общих для нескольких процессов. Приложение отвечает за ключи, сериализацию, TTL и инвалидацию. См. руководство «PostgreSQL и Redis cache-aside». Чтобы проверить кэширование строк, запустите краткое руководство.

Обновлено .