Хранятся ли где-нибудь в postgresql планы выполнения запросов?

Я пытаюсь выяснить, хранятся ли где-то планы выполнения запросов PostgreSQL (возможно, в дополнение к pg_stat_statements и pg_prepared_statements) таким образом, чтобы они были доступны дольше, чем продолжительность сеанса. Я понимаю, что PREPARE кэширует оператор sql в pg_prepared_statements, хотя сам план, насколько я могу судить, не доступен ни в одном представлении.

Я не уверен, есть ли документ, объясняющий жизненный цикл плана запроса для PostgreSQL, но из того, что он звучит в EXPLAIN, PostgreSQL вообще не кэширует планы запросов. Это точно?

Спасибо!


person chi    schedule 17.01.2018    source источник
comment
вы можете сохранить план для каждого запроса в журналы с помощью auto_explain   -  person Vao Tsun    schedule 17.01.2018


Ответы (1)


PostgreSQL не имеет общего хранилища для планов выполнения, поэтому их нельзя повторно использовать в сеансах базы данных.

Существует два способа кэширования плана выполнения внутри сеанса:

  1. Используйте подготовленные операторы с операторами SQL PREPARE и EXECUTE. План будет кэшироваться на время жизни подготовленного оператора, обычно до окончания сеанса.

  2. Используйте функции PL/pgSQL. Планы для всех статических операторов SQL (то есть операторов, которые не выполняются с EXECUTE) в такой функции будут кэшироваться на время существования сеанса.

Кроме этого, планы выполнения не кэшируются в PostgreSQL.

person Laurenz Albe    schedule 17.01.2018