PostgreSQL 在相同查询上接近计划缓存?

PostgreSQL approaching plan caching on identical queries?

我正在 运行对很多查询进行一些基准测试。我有一组查询,它们将 运行 彼此相继多次。我知道 PostgreSQL 缓存查询计划,所以考虑这一点很重要,但据我所知,这并不总是发生。

所以我有两种方法。我正在考虑 (a) 每次我 运行 查询时强制生成查询计划,或者 (b) 稍微 'warm up' 以便缓存计划并每次重复使用.我该如何执行其中之一或我可以采取哪些预防措施来确保其中一个发生?

如果我能在缓存中监控计划就好了,但我不确定是否可行。

更新:我的查询是用于检索数据的复杂 SELECT,没有 DELETEs/INSERTs 等。这是否意味着我不应该在基准测试中对查询规划器给予如此多的尊重?

PostgreSQL 仅缓存查询计划如果

  • 你使用准备好的语句
  • 语句在PL/pgSQL函数中执行

因此,如果您想对避免计划开销后的查询速度进行基准测试,您应该创建一个准备好的语句并至少执行六次(因为前五次运行将始终生成自定义计划).

如果您的查询很复杂,如果您缓存查询计划,您甚至可能会失败,尤其是在查询的运行时间很长的情况下。在这种情况下,通常最好花更多的精力来计划每个查询。准备好的语句的最大好处是查询的执行时间很短。