2016-09-20 4 views
4

Я хотел бы узнать, сколько времени потребовалось для выполнения запроса. Я планирую сделать это для аудита и поддержки.Как определить время выполнения запроса KDB

Я нашел это в документации:

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

Но выше метод фактически оценивает запрос снова и говорит нам время. Он не возвращает результаты запроса. Поэтому, если я использую это, это будет похоже на выполнение каждого запроса дважды, один раз для получения результатов и один раз для получения информации о времени выполнения.

Есть ли какой-либо другой метод, о котором кто-то знает?

ответ

2

Вы можете использовать вызов «system t» (эквивалент \ t) для сохранения результата и времени за один раз.

b:system"t a:log til 100000" 

Это не очень общий или функциональный, хотя, так что не может удовлетворить ваши потребности, чтобы иметь команды внутри строки.

2

Вы также можете записать время до/после выполнения запроса, чтобы выяснить время выполнения.

Выполнить на одной строке:

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.. 

 Смежные вопросы

  • Нет связанных вопросов^_^