【发布时间】:2014-08-06 19:05:28
【问题描述】:
我正在尝试优化我的功能。
问题是当你得到一个结果后运行查询。
第二次或第三次运行查询,处理时间要小得多。
SELECT map.get_near_link(a.X, a.Y, a.azimuth)
FROM traffic.avl;
第一次 17 段
Total query runtime: 17188 ms.
801 rows retrieved.
第二次11段
Total query runtime: 11406 ms.
801 rows retrieved.
我猜有某种缓存在幕后进行优化。 如何禁用此行为,以便获得更真实的运行时值?
【问题讨论】:
-
我想你可以假设第二个结果比第一个更现实。
-
理论上我假设 x, y , 方位角在每个查询中都会不同,因为与第二个用户输入的确切值非常不同。所以我认为第一个值是最现实的。无论如何,如果我更改函数中的代码,我将不得不多次运行所有测试以确保其中一个是平均值。
-
当我对 Postgres 进行非平凡测试时,我了解到第一个结果的标准差几乎总是最大的。因此我接受了跳过第一个结果的原则。我认为您必须使用随机参数测试您的函数。
-
为您提供更多信息。在我的引擎中,我创建了一个字段 [tProcess] 来了解每个函数调用需要多少时间。通常每个函数调用少于 10 毫秒是正常的,但也有调用寄存器 2900 毫秒(x290 次)的情况。然后我想单独尝试这个案例,看看有什么问题,我得到执行时间是 30 毫秒:/
-
这就是为什么你不能只依赖一个测试。唯一的方法是增加对随机值的测试次数。我还没有听说过将服务器重置到以前的状态的方法。
标签: postgresql