2

サーバーの使用状況に関する有意義な統計情報を提供する任意の 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 番目、4 番目などの行を見てください =- 私の質問は基本的に、どのようにして経過時間が「作成時間から」よりも大きくなるのでしょうか??

確かに、それがたった 1 時間前に作成されたのであれば、一体どのようにして最後の経過時間で報告されたように 12 時間以上かかったのでしょうか?

このコラムの基本的な意味をどこかで見逃している可能性があることはわかっていますが、どこにあるのかわかりません。このビューの Microsoft ドキュメントを確認しました。

sys.dm_exec_query_stats (Transact-SQL)

ここで、last_elapsed_time 列は次のように説明されています。

この計画の最後に完了した実行の経過時間 (マイクロ秒単位で報告されますが、正確なのはミリ秒までです)

確かに、それがたった 1 時間前に作成されたものであれば、それ以上の結果は期待できませんか??

誰か助けてください... 私は自分の正気を疑い始めています!

4

1 に答える 1

4

最後の経過時間はマイクロ秒単位で測定されます。あなたのsince_create_time_ms計算はミリ秒単位です

DATEDIFF(ms, creation_time, getdate())         [since_creation_time_ms]
于 2016-12-15T17:26:27.467 に答える