DMV sys.dm_exec_query_statsのlast_worker_timeとlast_elapsed_timeの違いは何ですか?


11

DMV sys.dm_exec_query_statsのlast_worker_timelast_elapsed_timeの意味は何ですか?それらの違いは何ですか?

クエリの下で起動したとき

    SELECT TOP 20 
qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S,
qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S
FROM sys.dm_exec_query_stats qs
order by qs.last_worker_time desc

以下のような結果になります。

ここに画像の説明を入力してください

私が気づいたのは、両方が等しいか、経過時間がワーカー時間よりも長いことです。両方の意味を理解したいので、パフォーマンスのチューニングにも役立ちます。

回答:


16

ワーカー時間とは、タスクが事実上アクティブで、スケジューラを占有してコードを実行している(つまり、中断されていない)時間です。経過時間は時刻です。DOP 1クエリでは、ワーカー時間は最大で経過時間であり、実行中にタスクが一時停止された場合は少なくなります(したがって、クロック時間は進みますが、ワーカー時間は進みません)。DOP> 1の場合、ワーカー時間は合計されるため、一時停止されたまま経過時間を超える可能性があります。

ワーカー時間と経過時間の有意差はブロックを示しています。経過時間682616と11509766の経過を考慮してください。これは、何か(おそらくロック)を待って11秒間ブロックされた要求です。


注:DOPは「並列度」の略です。1は、クエリ全体が単一のCPUによって処理されることを意味し、複数の場合は、ジョブがスレッドに分割され、それぞれが異なるCPUによって実行されることを意味します。
RDFozz

@RDFozz申し訳ありませんが、これは古いスレッドです。あなたが言ったことを少し修正したかっただけです。DOPはクエリの実行プランの各演算子に適用されるため、演算子ごとではなく、クエリごとに複数のスレッドを実行できます。 sqlmag.com/blog/common-misconception-about-maxdop
SpaceGhost440
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.