我正在对很多查询进行一些基准测试。我有一组查询,它们将在彼此之后多次运行。我知道PostgreSQL会缓存查询计划,所以这一点很重要,但据我所知,并不总是这样。
所以我有两种方法。我正在考虑(a)强制每次运行查询时生成查询计划,或者(b)稍微“预热”以便计划被缓存并且每次都重复使用。我该如何执行或采取哪些预防措施来确保发生其中一种情况?
如果我可以监控缓存中的计划,但我不确定是否可行。
更新:我的查询是复杂的SELECT来检索数据,没有DELETE / INSERT等。这是否意味着我不应该对基准测试中的查询规划者给予如此多的尊重?
答案 0 :(得分:1)
如果
,PostgreSQL仅缓存查询计划因此,如果您希望在避免计划开销的情况下对查询的速度进行基准测试,则应创建一个预准备语句并至少执行六次(因为前五次运行将始终生成自定义计划)。
如果您的查询很复杂,那么如果您缓存查询计划,可能会丢失,特别是如果查询的运行时很长。在这种情况下,通常最好花费更多精力来规划每个查询。准备语句的最大胜利是查询的执行时间很短。