Как PostgreSQL кеширует операторы и данные? - PullRequest
32 голосов
/ 22 августа 2011

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

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

1 Ответ

42 голосов
/ 22 августа 2011

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

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

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

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

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

Это делает кеш, если вы используете 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

Он не кеширует специальные запросы, введенные в psql.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...