我正在开发一个可以部署到任何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
我运行这个,这是我得到的结果的样本:
专门研究我的结果中的第2,第3等等......行 - 我的问题基本上是,经过的时间怎么能大于'自创作时间'?
当然,如果它是在1小时前创建的,那么它在上一次经过的时间内如何报道12小时以上呢?
我知道我可能在某个地方错过了这个专栏的基本含义,但我无法看到哪里。我已经浏览了这个视图的Microsoft文档:
sys.dm_exec_query_stats (Transact-SQL)
其中将last_elapsed_time列描述为:
经过的时间,以微秒为单位报告(但仅精确到 毫秒),用于最近完成的该计划的执行
当然,如果它是在1小时前创建的,我不应该期望结果大于那个?
请有人帮帮我...我开始怀疑自己的理智了!
答案 0 :(得分:3)
上次经过的时间以微秒为单位。您的since_create_time_ms
计算以毫秒为单位
DATEDIFF(ms, creation_time, getdate()) [since_creation_time_ms]