Руководство по выбору кэширования 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». Чтобы проверить кэширование строк, запустите краткое руководство.
Обновлено .