2016-09-20 12 views
4

クエリの実行に要した時間を確認したいと思います。監査とサポートの目的でこれを記録する予定です。KDBクエリの実行時間の確認方法

私はドキュメントでこれを見つけた:

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

しかし、上記の方法は、実際に問合せを再評価し、私たちに時間を伝えます。クエリの結果は返されません。だから私はこれを実際に使用する場合は、結果を得るために1回、実行時間を知るために1回、すべてのクエリを2回実行するようなものになります。

誰かが知っている他の方法はありますか?

答えて

2

「システムt」コール(\ tと同等)を使用して、結果と時間を一度に格納することができます。

b:system"t a:log til 100000" 

ので、それは文字列内のコマンドを持っているあなたのニーズに合わないかもしれませんがそれは非常に一般的または機能的ではありません。

2

実行時間を把握するために、クエリの実行前後の時間を取得することもできます。

1行に実行します。

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

、あなたは値を返し、標準出力にかかる時間を印刷する関数でこれをラップすることができます:

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.. 
関連する問題