如何找出KDB查询执行时间

时间:2016-09-20 07:07:21

标签: kdb

我想知道查询执行的时间。我计划将其记录下来用于审计和支持目的。

我在文档中找到了这个:

  

q)\t log til 100000 / milliseconds for log of first 100000 numbers
  3

但是上面的方法实际上会再次评估查询并告诉我们时间。它不会返回查询结果。因此,如果我使用它,它实际上就像运行每个查询两次,一次用于获取结果,一次用于了解执行时间。

有人知道其他任何方法吗?

3 个答案:

答案 0 :(得分:3)

您还可以捕获查询运行之前/之后的时间以确定执行时间。

执行一行:

q)start:.z.p;result:log til 100000;exectime:.z.p-start 

q)exectime
0D00:00:00.297268000   

q)result 
-0w 0 0.6931472 1.098612 1.386294 ...

此方法将为您提供纳秒精度,但可以轻松调整以返回与\t相同的效果。

q)res:system"t a:{st:.z.p;log til 10000000;.z.p-st}[]"  
q)`long$`time$a   /convert to Ms
297  
q)res
297

答案 1 :(得分:2)

您可以使用"系统t"调用(相当于\ t)来一次性存储结果和时间。

b:system"t a:log til 100000" 

虽然它不是很通用或功能,但它可能不适合你在字符串中包含命令的需要。

答案 2 :(得分:1)

扩展Connor的想法,你可以将它包装在一个函数中,该函数将返回值并打印stdout所需的时间:

time:{ t0:.z.t; r:eval x; 0N!.z.t-t0; :r }

然后发送函数的parse tree作为参数:

q)a:time (log;til 100000)
00:00:00.003
q)a
-0w 0 0.6931472 1.098612 1.386294 1.609438 1.791759 1.94591 2.079442 2.197225..