0
我正在对很多查询运行一些基准测试。我有一系列的查询,它们会在彼此之后多次运行。我知道PostgreSQL缓存查询计划,所以这是重要的考虑,但据我所知,这并不总是发生。PostgreSQL在相同的查询上接近计划缓存?
所以我有两种方法。我正在考虑(a)强制每次运行查询时生成查询计划,或者(b)稍微“预热”一下,以便计划被缓存并且每次重用。我该如何执行,或者我可以采取哪些预防措施来确保其中一个发生?
如果我可以监控缓存中的计划,但是我不确定是否有可能,那将会很棒。
更新:我的查询是复杂的SELECTs来检索数据,没有DELETEs/INSERTs等。这是否意味着我不应该对查询计划器在基准测试中给予如此的尊重?如果
- 你使用准备好的语句
- 的语句是PL/pgSQL功能
所以内执行的,如果你想基准你的查询如何更快成为如果
谢谢!您建议通过准备好的报表进行基准测试,而不需要计划开销你也可以说PostgreSQL也通过PL/pgSQL函数来缓存查询计划 - 这意味着我可以期待相同的行为,即如果我使用PL/pgSQL过程并执行它至少5次,那么我可以安全地期望缓存计划第六轮开始? – Zeruno
是的,你说得对 - 在大多数情况下。有时PostgreSQL会认为通用计划不够好,并继续生成自定义计划。为了测试,你可以在函数内部使用'EXPLAIN EXECUTE prepared_statement'或auto_explain来声明。如果您在那里看到“$ 1”,则使用通用计划。没有参数的陈述当然总是使用通用计划。 –
感谢您解释良好的答复!很有帮助。 – Zeruno