查询执行计划是否存储在 postgresql 中的任何位置?

chi*_*chi 2 postgresql explain

我试图弄清楚 PostgreSQL 查询执行计划是否以比会话持续时间更长的方式存储在某个地方(可能作为pg_stat_statements和的补充)。pg_prepared_statements据我所知,它PREPARE确实在 中缓存了一条 sql 语句pg_prepared_statements,尽管据我所知,该计划本身似乎在任何视图中都不可用。

我不确定是否有文档解释 PostgreSQL 查询计划的生命周期,但从EXPLAIN文档中听起来,PostgreSQL 根本不缓存查询计划。这准确吗?

谢谢!

Lau*_*lbe 9

PostgreSQL 没有用于执行计划的共享存储,因此它们不能跨数据库会话重用。

有两种方法可以在会话中缓存执行计划:

  1. 将准备好的语句与 SQL 语句PREPARE和 一起使用EXECUTE。该计划将在准备好的语句的生命周期内被缓存,通常直到会话结束。

  2. 使用 PL/pgSQL 函数。此类函数中所有静态 SQL 语句(即不使用运行的语句EXECUTE)的计划将在会话生命周期内进行缓存。

除此之外,执行计划不会缓存在 PostgreSQL 中。