Do MSDN :
Retorna informações sobre a fila de espera de tarefas que estão aguardando algum recurso.
A CPU é considerada um recurso nesta definição? Inicialmente pensei que não, mas o que me deixou preocupado é a definição da wait_duration_ms
mesma página:
wait_duration_ms Tempo total de espera para este tipo de espera, em milissegundos. Este tempo inclui signal_wait_time.
Se incluir RUNNABLE
tarefas, então qual seria o valor wait_type
para elas? É algum valor especial indicando que não está bloqueado, mas aguardando o agendador, ou é o mesmo valor que tinha quando estava em SUSPENDED
estado?
Uma tarefa que produz o agendador porque esgota seu quantum não aparecerá em sys.dm_os_waiting_tasks ; no entanto, qualquer tempo de espera de sinal será acumulado em sys.dm_os_wait_stats em
SOS_SCHEDULER_YIELD
.Uma tarefa que resulta em adquirir um "recurso em espera" atualmente indisponível aparece em sys.dm_os_waiting_tasks com o apropriado
wait_type
e é suspensa. Ele acumula o tempo de espera do recurso até ser sinalizado (quando o recurso fica disponível) e executável. A tarefa então acumula o tempo de espera do sinal até adquirir o agendador e fazer a transição para o status de execução. A tarefa permanece visível em sys.dm_os_waiting_tasks até que a espera seja totalmente concluída (incluindo espera de sinal) ewait_type
nunca muda.Essa é a minha compreensão e observação. Não consegui encontrar esse nível de detalhe documentado oficialmente ou semi-oficialmente em nenhum lugar.
Uma observação de cautela: sys.dm_os_waiting_tasks é uma exibição não transacional sobre estruturas de dados de tarefas SOS internas que mudam rapidamente. Muitos DMVs funcionam dessa maneira e foram escritos por diferentes desenvolvedores em momentos diferentes. Sua saída pode ser muito útil, mas juntar vários DMVs pode facilmente levar a resultados aparentemente inconsistentes.
A comparação de instantâneos da DMV sys.dm_os_waits é uma maneira melhor de dividir as esperas de recursos e sinais agregados para um tipo de espera específico. Eventos estendidos, por exemplo,
scheduling.wait_completed
podem ser usados para capturar eventos de espera específicos se esse nível de detalhe for necessário.Redação técnica é difícil. Sempre haverá alguns que reclamam que há muitos detalhes, enquanto outros dizem que há muito pouco. O DMV mostra esperas em alguns recursos, até que a espera termine. Acho que poderia ser mais claro em alguns aspectos, mas até onde você pode ir sem detalhar a implementação interna e, finalmente, fornecer o código-fonte?