SQL sys.dm_exec_query_stats Last_Elapsed_Time废话

时间:2016-12-15 16:52:57

标签: sql-server system-views

我正在开发一个可以部署到任何SQL服务器的脚本,它将提供有关服务器使用情况的一些有意义的统计信息。我很快意识到,我从sys.dm_exec_query_stats上的last_elapsed_time列中得到了一些相当可疑的结果。以下面的脚本为例:

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

我运行这个,这是我得到的结果的样本:

![enter image description here

专门研究我的结果中的第2,第3等等......行 - 我的问题基本上是,经过的时间怎么能大于'自创作时间'?

当然,如果它是在1小时前创建的,那么它在上一次经过的时间内如何报道12小时以上呢?

我知道我可能在某个地方错过了这个专栏的基本含义,但我无法看到哪里。我已经浏览了这个视图的Microsoft文档:

sys.dm_exec_query_stats (Transact-SQL)

其中将last_elapsed_time列描述为:

  

经过的时间,以微秒为单位报告(但仅精确到   毫秒),用于最近完成的该计划的执行

当然,如果它是在1小时前创建的,我不应该期望结果大于那个?

请有人帮帮我...我开始怀疑自己的理智了!

1 个答案:

答案 0 :(得分:3)

上次经过的时间以微秒为单位。您的since_create_time_ms计算以毫秒为单位

DATEDIFF(ms, creation_time, getdate())         [since_creation_time_ms]