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]
Другие вопросы по тегам