查询执行计划是否存储在 postgresql 中的任何位置?
Are query execution plans stored anywhere in postgresql?
我想弄清楚 PostgreSQL 查询执行计划是否存储在某处(可能是对 pg_stat_statements
和 pg_prepared_statements
的补充),它们的可用时间比会话持续时间长.我知道 PREPARE
确实在 pg_prepared_statements
中缓存了 sql 语句,但据我所知,该计划本身似乎在任何视图中都不可用。
我不确定是否有文档解释 PostgreSQL 查询计划的生命周期,但从 EXPLAIN 文档中的内容来看,PostgreSQL 根本不缓存查询计划。这准确吗?
谢谢!
PostgreSQL 没有用于执行计划的共享存储,因此它们不能跨数据库会话重用。
有两种方法可以在会话中缓存执行计划:
将准备好的语句与 SQL 语句 PREPARE
和 EXECUTE
一起使用。该计划将在准备好的语句的生命周期内缓存,通常直到您的会话结束。
使用PL/pgSQL函数。此类函数中所有静态 SQL 语句(即 不是 运行 和 EXECUTE
的语句)的计划将被缓存会话生命周期。
除此之外,Postgre 中不缓存执行计划SQL。
我想弄清楚 PostgreSQL 查询执行计划是否存储在某处(可能是对 pg_stat_statements
和 pg_prepared_statements
的补充),它们的可用时间比会话持续时间长.我知道 PREPARE
确实在 pg_prepared_statements
中缓存了 sql 语句,但据我所知,该计划本身似乎在任何视图中都不可用。
我不确定是否有文档解释 PostgreSQL 查询计划的生命周期,但从 EXPLAIN 文档中的内容来看,PostgreSQL 根本不缓存查询计划。这准确吗?
谢谢!
PostgreSQL 没有用于执行计划的共享存储,因此它们不能跨数据库会话重用。
有两种方法可以在会话中缓存执行计划:
将准备好的语句与 SQL 语句
PREPARE
和EXECUTE
一起使用。该计划将在准备好的语句的生命周期内缓存,通常直到您的会话结束。使用PL/pgSQL函数。此类函数中所有静态 SQL 语句(即 不是 运行 和
EXECUTE
的语句)的计划将被缓存会话生命周期。
除此之外,Postgre 中不缓存执行计划SQL。