SQL sys.dm_exec_query_stats Last_Elapsed_Time ерунда
Я работаю над сценарием, который могу развернуть на любом сервере SQL, который предоставит некоторую значимую статистическую информацию об использовании серверов. Я довольно быстро понял, что получаю довольно подозрительные результаты из столбца last_elapsed_time на sys.dm_exec_query_stats. Возьмите следующий скрипт для примера:
select
creation_time,
last_elapsed_time [last_elapsed_time_ms],
last_worker_time [last_worker_time_ms],
DATEDIFF(MILLISECOND, creation_time, getdate()) [since_creation_time_ms],
convert(varchar(20), DATEDIFF(DAY, 0, CONVERT(VARCHAR,DATEADD(ms,last_elapsed_time,0),113))) + ' days ' +
CONVERT(VARCHAR,DATEADD(ms,last_elapsed_time,0),114) [last_elapsed_time_format],
convert(varchar(20), DATEDIFF(DAY, 0, CONVERT(VARCHAR,DATEADD(ms,last_worker_time,0),113))) + ' days ' +
CONVERT(VARCHAR,DATEADD(ms,last_worker_time,0),114) [last_worker_time_format],
convert(varchar(20), DATEDIFF(DAY, creation_time, getdate())) + ' days ' +
CONVERT(VARCHAR,DATEADD(ms,DATEDIFF(MILLISECOND, creation_time, getdate()),0),114) [since_creation_time]
from sys.dm_exec_query_stats
order by last_elapsed_time desc
Я запускаю это и вот пример результата, который я получаю:
В частности, рассматривая строки 2, 3, 4 и т. Д. В моих результатах =- Мой вопрос в основном, как истекшее время может быть больше, чем "С момента создания"??
Конечно, если он был создан всего 1 час назад, как же он мог занять более 12 часов, как сообщалось в последний прошедший раз?
Я знаю, что, возможно, где-то пропущен фундаментальный смысл этой колонки, но я просто не вижу, где. Я просмотрел документ Microsoft для этого представления:
sys.dm_exec_query_stats (Transact-SQL)
где это описывает столбец last_elapsed_time как:
Истекшее время, сообщаемое в микросекундах (но с точностью до миллисекунд), для последнего выполненного выполнения этого плана
Конечно, если он был создан всего 1 час назад, я бы не ожидал, что результат больше, чем это??
Пожалуйста, кто-нибудь может помочь мне здесь... Я начинаю подвергать сомнению свое собственное здравомыслие!
1 ответ
Последнее прошедшее время измеряется в микросекундах. Ваш since_create_time_ms
расчет в миллисекундах
DATEDIFF(ms, creation_time, getdate()) [since_creation_time_ms]