Как инструкции и данные кэша PostgreSQL?

В Oracle операторы SQL будут кэшироваться в shared_pool, а часто используемые данные будут кэшироваться в db_cache.

Что делает PostgreSQL? Будут ли кэшироваться операторы SQL и данные в shared_buffers?

Ответ 1

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

Планы запросов кэшируются в некоторых случаях. Лучший способ обеспечить это - ПОДГОТОВИТЬ запрос один раз, а затем EXECUTE его каждый раз.

Результаты запроса не будут автоматически кэшироваться. Если вы повторите один и тот же запрос, даже если он буквенный для письма идентичен, и никаких обновлений не было выполнено в БД - он все равно выполнит весь план. Разумеется, он будет использовать любые данные таблицы/индекса, которые уже находятся в кэше разделяемых буферов; поэтому ему не обязательно снова будет считывать все данные с диска.

Обновление кэширования плана

Планирование кэширования обычно выполняется за сеанс. Это означает только соединение, которое заставляет план использовать кешированную версию. Другие соединения должны создавать и использовать свои собственные кешированные версии. Это не проблема производительности, поскольку экономия, получаемая от повторного использования плана, почти всегда минимальна по сравнению со стоимостью подключения в любом случае. (Если ваши запросы действительно сложны.)

Он кэшируется, если вы используете PREPARE: http://www.postgresql.org/docs/current/static/sql-prepare.html

Он кэшируется, когда запрос находится в функции PL/PLSQL: http://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING

Он не кэширует запросы ad-hoc, введенные в psql.

Надеюсь, что кто-то еще сможет разработать любые другие случаи кэширования плана запроса.