O monitoramento constante das sessões e processos em um ambiente de produção SQL Server é fundamental para garantir a saúde do banco de dados. Em situações onde o sistema apresenta lentidão súbita, alta carga de processamento ou suspeita de deadlocks, a aálise detalhada das conexões ativas permite identificar a causa raiz do problema, seja uma transação aberta por tempo excessivo, uma consulta bloqueada ou a necessidade de encerrar um processo específico.
Uma das ferramentas clássicas para essa análise é a view de compatibilidade sys.sysprocesses. Ela concentra informações vitais sobre o estado dos processos, tempos de espera e recursos consumidos. Embora existam DMVs mais recentes (como sys.dm_exec_requests), a sys.sysprocesses continua sendo uma fonte de dados rápida e eficiente para diagnósticos imediatso.
-- Consulta básica para visualizar todos os processos
SELECT * FROM sys.sysprocesses;
Descrição dos Principais Campos
Para interpretar corretamente os dados retornados, é necessário compreender o significado das colunas mais relevantes desta tabela:
| Coluna | Descrição Técnica |
|---|---|
| spid | ID da sessão (Session ID). Valores menores que 50 geralmente referem-se a processos internos do sistema; valores acima de 50 são conexões de usuários. |
| blocked | ID do processo que está bloqueando a execução. Se o valor for maior que 0, indica um bloqueio. Se for igual ao próprio spid, indica uma operação de I/O pendente. |
| waittime | Tempo acumulado de espera em milissegundos para a tarefa atual. |
| open_tran | Quantidade de transações abertas para o processo. Útil para identificar transações que esqueceram de executar um COMMIT ou ROLLBACK. |
| status | Estado do processo. Os principais são: - running: Executando um lote de comandos. - runnable: Na fila de execução, aguardando recursos de CPU (sinal de pressão de processamento). - suspended: Aguardando a conclusão de um evento, como leitura de disco (I/O). - sleeping: Sessão conectada, mas sem atividade no momento. - rollback: Processo em fase de reversão de transação. |
| hostname | Nome da estação de trabalho cliente que estabeleceu a conexão. |
| program_name | Nome da aplicação que iniciou a conexão. |
| loginame | Nome de login associado ao processo. |
Consultas Práticas para Diagnóstico
Abaixo, seguem scripts estruturados para identificar cenários específicos de carga e contenção no servidor.
1. Identificação de Sessões de Usuário Ativas
Filtra apenas conexões externas que não estão em modo de espera (sleeping), priorizando aquelas com maior tempo de retenção de recursos.
SELECT
spid AS ID_Sessao,
kpid AS ID_Thread,
status AS Estado,
loginame AS Usuario,
hostname AS Estacao,
DB_NAME(dbid) AS Banco_Dados,
waittime AS Tempo_Espera_MS,
lastwaittype AS Motivo_Espera,
open_tran AS Transacoes_Abertas,
program_name AS Aplicativo
FROM sys.sysprocesses WITH(NOLOCK)
WHERE spid > 50
AND status <> 'sleeping'
AND kpid > 0
ORDER BY waittime DESC;
2. Análise de Bloqueios (Contenção)
Esta consulta foca exclusivamente em processos que estão impedindo a execução de outras tarefas, facilitando a identificação da origem de gargalos.
SELECT
spid AS ID_Sessao,
blocked AS Bloqueado_Por,
waittime AS Tempo_Espera_MS,
lastwaittype AS Tipo_Espera,
waitresource AS Recurso_Aguardado,
loginame AS Usuario,
[status] AS Situacao
FROM sys.sysprocesses WITH(NOLOCK)
WHERE blocked > 0
OR spid IN (SELECT blocked FROM sys.sysprocesses WHERE blocked > 0)
ORDER BY blocked ASC;
3. Verificação de Processos do Sistema
Útil para monitorar tarefas internas como Checkpoint, Lazy Writer e Log Writer.
SELECT
spid,
status,
loginame,
hostname,
cmd AS Comando_Interno
FROM sys.sysprocesses
WHERE spid <= 50;
Ao analisar os resultados, observe atentamente a coluna status. Se houver muitos processos como runnable, o servidor pode estar sofrendo de gargalo de CPU. Se o estado predominante for suspended, verifique a performance do subsistema de disco ou possíveis contenções de rede.