qual é a diferença entre last_worker_time e last_elapsed_time no DMV sys.dm_exec_query_stats?

11

qual é o significado de last_worker_time e last_elapsed_time no DMV sys.dm_exec_query_stats e qual a diferença entre eles?

quando eu tiro abaixo da consulta

    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

Eu sou reultado como abaixo.

insira a descrição da imagem aqui

No que eu notei, ou ambos são iguais ou o tempo decorrido é mais do que o tempo do trabalhador. Gostaria de não entender a significância de ambos, para que também possa me ajudar no desempenho.


fonte

Respostas:

16

Tempo do trabalhador é o tempo em que as tarefas estavam efetivamente ativas, ocupando um agendador e executando o código (ou seja, não suspenso). O tempo decorrido é a hora do relógio. Em uma consulta DOP 1, o tempo do trabalhador será no máximo o tempo decorrido, menos se a tarefa for suspensa a qualquer momento durante a execução (portanto, o tempo do relógio avançará, mas o tempo do trabalhador não). Para DOP> 1, o tempo de trabalho é agregado para que eles possam exceder o tempo decorrido, enquanto ainda estão sujeitos a suspensão.

Uma diferença significativa entre o tempo do trabalhador e o tempo decorrido é indicativa de bloqueio; considere o trabalhador 682616 vs. 11509766 decorrido: essa é uma solicitação que bloqueou por 11 segundos à espera de algo (provavelmente um bloqueio).

Remus Rusanu
fonte
Nota: DOP significa "grau de paralelismo"; 1 significa que a consulta inteira é processada por uma única CPU, mais de um significa que o trabalho é dividido em threads, cada um dos quais pode ser executado por uma CPU diferente.
RDFozz
@RDFozz Desculpe, eu sei que este é um tópico antigo. Só queria fazer uma ligeira correção no que você disse. O DOP se aplica a cada operador no plano de execução da consulta. Portanto, você ainda pode ter vários threads em execução por consulta, apenas não por operador. sqlmag.com/blog/common-misconception-about-maxdop
SpaceGhost440