Explorando as DMVs dm_exec_session_wait_stats e dm_os_waiting_tasks no SQL Server

Você provavelmente já se deparou com situações onde o desempenho das consultas não está correspondendo ao esperado. Um dos principais desafios é identificar e resolver gargalos de desempenho que, muitas vezes, estão relacionados a esperas (waits) dentro do servidor. Uma ferramenta poderosa que pode ajudar nessa análise inicial são as Dynamic Management View (DMV). Neste post, vamos abordar duas delas: dm_exec_session_wait_stats e dm_os_waiting_tasks..

A sys.dm_exec_session_wait_stats captura as estatísticas acumuladas de todas as esperas que uma determinada sessão “experimentou” durante sua execução. Ou seja, ela dá uma visão histórica das esperas que uma sessão passou desde que foi criada, incluindo o tipo de espera, o tempo total de espera, o número de ocorrências, entre outros.

  • Uso: É mais útil para identificar problemas de desempenho em uma sessão específica ao longo do tempo. Ela permite que vejamos como o tempo de espera acumulado pode estar afetando uma sessão e oferece uma visão mais ampla do comportamento da sessão no SQL Server.

A sys.dm_os_waiting_tasks mostra detalhes sobre as tarefas individuais que estão em espera no exato momento em que a DMV é consultada. Isso inclui a sessão que está esperando, o tipo de espera, o recurso bloqueado, e informações detalhadas sobre o objeto ou recurso no qual a tarefa está esperando.

  • Uso: Esta DMV é mais útil para diagnósticos em tempo real e para resolver problemas de desempenho imediatos. Ela permite que observemos qual tarefa está aguardando por recursos específicos (como discos, locks, etc.) e ajustem sua abordagem de acordo com o que está afetando o desempenho no momento.

Realizei um exemplo prático utilizando a WhoIsActive para verificar o que está sendo executado no banco de dados. Ao coletar os dados, podemos ver um wait de CXCONSUMER, mas com apenas 1min de espera.


Já ao utilizar a sys.dm_exec_session_wait_stats, conseguimos ver todas as esperas que uma sessão enfrentou desde o início, com detalhes sobre o tempo de cada uma. Isso ajuda a descobrir qual espera teve o maior impacto. Por exemplo, podemos perceber que o tempo total de espera de CXCONSUMER foi maior do que o identificado pela WhoIsActive, e também que o verdadeiro causador do atraso pode ser outra espera, como CXPACKET.

E utilizando a sys.dm_os_waiting_tasks podemos monitorar em tempo real quais waits estão afetando a sessão no momento exato da execução e a duração de cada um.

Neste outro caso, embora a WhoIsActive não mostre nenhum wait ativo no momento da coleta, usando a DMV você consegue capturar mais detalhes sobre as esperas que ocorreram anteriormente e outras informações relevantes.

É importante destacar que, embora essas DMVs sejam extremamente úteis para uma análise inicial, uma investigação mais aprofundada ainda é necessária após a identificação de um wait problemático. Isso pode incluir a revisão do plano de execução, verificação de estatísticas, reescrita de query, entre outras abordagens para entender melhor o comportamento da consulta.

DMVs:

SELECT * FROM sys.dm_exec_session_wait_stats
WHERE session_id = (sua_sessão)


SELECT * FROM sys.dm_os_waiting_tasks
WHERE session_id = (sua_sessão)

LINKS DE APOIO
sys.dm_os_waiting_tasks
sys.dm_exec_session_wait_stats

Deixe um comentário