Entendendo Wait Types no SQL Server: um guia para iniciantes


Se você está começando sua jornada como DBA ou desenvolvedor SQL, entender wait types é essencial para diagnosticar gargalos de performance com precisão — sem adivinhar. Neste guia, você vai ver o que são waits, por que importam, como consultá-los e como interpretar os mais comuns.
O que são Wait Types no SQL Server?
Sempre que o SQL Server executa uma consulta, precisa de CPU, memória, disco e rede. Se algum desses recursos não está disponível no momento, a sessão entra em espera. O motivo específico da espera é registrado como um wait type.
Em outras palavras, waits são a forma do SQL Server dizer “o que estou esperando e onde está o atraso”. Ler esse “painel de avisos” ajuda você a encontrar o gargalo certo e priorizar a correção.
Uma analogia rápida (o banco)
Imagine uma fila no banco:
Você espera porque só há um caixa → pressão de CPU.
Exemplo de wait:SOS_SCHEDULER_YIELD
.Você espera porque o caixa foi buscar um documento no arquivo morto → latência de I/O de disco.
Exemplo de wait:PAGEIOLATCH_SH
.Você espera porque o cliente da frente ainda está no balcão → bloqueio entre transações.
Exemplos de waits:LCK_M_S
,LCK_M_X
.
Assim como o gerente do banco atua para acelerar o atendimento, o DBA usa os waits para agir no ponto certo do SQL Server.
Por que os Wait Types são importantes?
Solucionar consultas lentas com base em evidências.
Identificar gargalos de recurso (CPU, I/O, locks, rede).
Entender como o sistema está sendo usado.
Priorizar ações de tuning com impacto real.
Consulta útil para checar wait stats
Comece pelo básico, ordenando pelas maiores esperas acumuladas:
SELECT
wait_type,
wait_time_ms,
waiting_tasks_count
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
⚠️ As métricas de
sys.dm
_os_wait_stats
são cumulativas desde o último restart (ou desde um clear manual). Para análises confiáveis, colete após um período de carga representativo.
Versão prática (Top waits, %, e exclusão de waits “benignos”)
Muitas equipes ignoram waits de manutenção/ociosos para focar no que importa. Use um filtro simples e calcule a participação no total:
WITH waits AS (
SELECT
wait_type,
wait_time_ms,
signal_wait_time_ms,
waiting_tasks_count
FROM sys.dm_os_wait_stats
WHERE wait_type NOT LIKE 'SLEEP%' -- ociosos
AND wait_type NOT LIKE 'BROKER_%' -- Service Broker
AND wait_type NOT LIKE 'XE_%' -- Extended Events
AND wait_type NOT LIKE 'FT_IFTS%' -- Full-Text
AND wait_type NOT LIKE 'HADR_%' -- AG/HA infra
AND wait_type NOT LIKE 'SQLTRACE_%' -- SQL Trace
AND wait_type NOT IN (
'LAZYWRITER_SLEEP',
'REQUEST_FOR_DEADLOCK_SEARCH',
'CLR_AUTO_EVENT','CLR_MANUAL_EVENT',
'BROKER_RECEIVE_WAITFOR','DIRTY_PAGE_POLL'
)
)
SELECT TOP (15)
wait_type,
wait_time_ms,
signal_wait_time_ms,
waiting_tasks_count,
CAST(100.0 * wait_time_ms / SUM(wait_time_ms) OVER() AS DECIMAL(5,2)) AS pct_total_wait_time
FROM waits
ORDER BY wait_time_ms DESC;
Como interpretar waits comuns
CXPACKET
/CXCONSUMER
(paralelismo)
Pode indicar excesso de paralelismo ou distribuição desigual.
Ações: revisarMAXDOP
,cost threshold for parallelism
, planos e estatísticas.PAGEIOLATCH_*
(I/O de dados)
Espera por páginas vindas do disco (latência de storage).
Ações: checar IOPS/latência do storage, cache de buffer, índices e padrões de acesso.LCK_M_*
(locks/bloqueio)
Uma sessão espera outra liberar um recurso.
Ações: revisar transações longas, isolamento, missing indexes e padrões de escrita.ASYNC_NETWORK_IO
(rede/consumidor lento)
O servidor espera o cliente consumir os resultados.
Ações: otimizar paginação no cliente, reduzir linhas/colunas retornadas, checar rede.SOS_SCHEDULER_YIELD
(pressão de CPU)
Threads cedendo scheduler por alta demanda de CPU.
Ações: otimizar consultas e índices, revisar cardinalidade/estatísticas, avaliar capacidade de CPU.
Um fluxo simples de diagnóstico com waits
Capturar waits (básico ou versão prática com %).
Relacionar com sintomas (CPU alta? disco lento? bloqueios?).
Cruzar com métricas (PerfMon, storage, Query Store, waits por sessão via
sys.dm
_os_waiting_tasks
).Priorizar e testar mudanças (índices, parâmetros de paralelismo, ajustes de consulta, revisão de transações).
Conclusão
Wait types são o seu “mapa de calor” de onde o SQL Server perde tempo. Ao medir e interpretar esses sinais, você troca o chute por diagnóstico — e concentra esforços nas causas com maior retorno.
Fui, mas volto com mais SQL Server em breve!
✍️ Sobre o autor
O Prof. Landry é especialista em Microsoft SQL Server desde 1999, Microsoft Trainer, Professor Universitário e criador do canal SQL Server Expert no YouTube, com conteúdo técnico semanal para DBAs e profissionais de dados.
🚀 Quer aprender mais sobre SQL Server?
👉 Me acompanhe no LinkedIn e inscreva-se no canal para não perder nenhuma dica prática!
Subscribe to my newsletter
Read articles from SQL Server Expert directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

SQL Server Expert
SQL Server Expert
O Prof. Landry Duailibe é especialista em Microsoft SQL Server desde 1999, Microsoft Certified Trainer, professor universitário e criador do canal SQL Server Expert no YouTube, onde compartilha conteúdo técnico semanal para DBAs e profissionais de dados. Já ajudou milhares de alunos a evoluírem suas habilidades com SQL Server e conquistarem melhores oportunidades na área de dados.