测量Postgres中的实际查询性能

时间:2015-10-21 14:56:15

标签: database performance postgresql caching

我的目标是什么?

测量实际查询时间,以便在消耗的时间不满意时进行优化。

到目前为止我做了什么?

我们一直在使用MySQL,在那里我们习惯使用SQL_NO_CACHE进行测量。虽然这不会使MySQL使用缓存,如提到here,但它比使用缓存更好。

实际的问题不是MySQL时间实际上是正确的,实际上并不是因为它不会禁用操作系统的缓存,而是关于如何测量从Postgres中缓存出来的查询的时间。

从上面的相同SO答案中可以看出,Postgres没有相应的内容,Postgres中的缓存工作方式也大不相同。

因此,如果我们进行多次查询并运行它,可能需要一些时间才开始,但进一步调用主要来自缓存(来自使用explain(analyze,buffers)。

建立上述事实后,我如何衡量查询时间。

问题1:由于需要进行大量预热,我们无法直接说出查询速度很慢

问题2:如果我们运行查询说5次并取平均值,则结果不准确,因为它使用缓存

问题

  • 考虑问题1,2,我的目标是确定查询是否需要性能调优,而不是实际的性能/负载测试,在这种情况下缓冲区缓存会出现在图片中
  • 根据我的理解,缓存包含8KB块中的页面,它就像从内存中快速读取一样脱离缓存。我的理解在这里是否正确?

1 个答案:

答案 0 :(得分:0)

您可以为缓存设置最低可能值以减少缓存效果

您也可以停止pg运行echo 3 /proc/sys/vm/drop_caches以删除操作系统缓存

但是没有必要真正的缓存 您的测试环境应该是最接近生产的条件,并且产品肯定有缓存! 最好比较获取查询的不同方式或设计架构的不同方法,并选择最佳