2016-12-15 79 views
2

我正在處理一個腳本,我可以將它部署到任何SQL服務器上,這將爲服務器的使用情況提供一些有意義的統計信息。我很快意識到,雖然我從sys.dm_exec_query_stats的last_elapsed_time列獲得了一些令人懷疑的結果。看看下面的腳本,例如: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

在第二屆專門尋找,在第三第四等行我的結果= - 我的問題基本上是,經過的時間怎麼會比'自從創造時間'?

當然,如果它是在1小時前創建的,那麼在上一次過去的時間內如何報告12個小時?

我知道我可能錯過了這個專欄的某個地方的基本含義,但我不知道在哪裏。我已經通過微軟文檔走了這樣的觀點:

sys.dm_exec_query_stats (Transact-SQL)

哪裏是描述last_elapsed_time列:

經過時間,報以微秒(但只能精確到 毫秒),用於這個計劃最近完成的執行

當然,如果它只是在1小時前創建,我不應該期望一個結果任何大於??

請有人可以幫助我在這裏...我開始質疑我自己的理智!

回答

3

上次經過時間以微秒爲單位進行測量。你的since_create_time_ms的計算是以毫秒爲單位

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

唉現在,它會這樣做!非常感謝SQLChao的快速回復!我會得到這個排序並更新答案! – CJH