Muitas vezes em minha vida profissional, precisei saber quais processos estavam em execução no banco de dados, pois apesar de não ser DBA, essa verificação já me ajudou a resolver muitos incidentes. Neste artigo vou mostrar como visualizar e gerenciar os processos em execução no SQL Server.
Se você já conhece a procedure SP_WHO2 e sabe o que é cada resultado que ela tráz, poderá prosseguir para o próximo artigo, pois este primeiro é apenas uma introdução a esta procedure.
Para começar, execute o comando abaixo no SQL Server:
Se você tiver permissão de visualizar os processos, o comando acima irá lhe retornar várias linhas, caso contrário, você visualizará apenas os processos que têm permissão para tal. Segue abaixo um exemplo:
A procedure SP_WHO2 mostra todos os processos em execução, visiveis pelo usuário que a executa. Esta procedure busca tais informações das tabelas e views do sistema, tais como sys.sysprocesses, porém "traduzindo" as informações para dados mais legíveis.
Vamos entender o que o resultado desta procedure nos diz:
SPID:
- System Process Identification, é o número de indentificação do processo. Este número é unico entre os todos os processos em execução no banco de dados e é utilizado para manupular o processo, como por exemplo, finalizá-lo.
Status:
- Informa o status do processo no momento da verificação. Pode assumir vários valores, mas os mais comuns são:
- RUNNABLE - Indicando que o processo esta em execução naquele momento.
- SLEEPING - O processo já foi executado, mas os recursos ainda estão alocados.
- BACKGROUND - O processo é executado em segundo plano, normalmente uma rotina do próprio SQL Server.
- SUSPENDED - Indica que o processo foi suspenso, pois esta aguardando a conclusão de uma atividade que não depende do SQL Server, como por exemplo, esperando a escrita de um arquivo de LOG no disco.
Login:
- O nome do login que iniciou o processo.
HostName:
- Nome do computador de onde se originou a requisição para a execução do serviço.
BlkBy:
- Este campo é muito importante para a identificação de DeadLock. Quando um processo está sendo bloqueado por outro, este é exibido no campo BlkBy informando quando SPID do processo que o esta bloqueando. Se não há processo bloqueando este, o campo é preenchido com "."
DBName:
- Nome da base de dados onde o processo esta sendo executado.
Command:
- Mostra a ação ou comando sendo executada atualmente. Devido a tratativa que a procedure faz, ela não mostra o comando completo que esta sendo executado, exceto quando este traz o valor AWAITING COMMAND, pois indica que o processo já foi executado e está aguardando um novo comando para executar.
CPUTime:
- Tempo gasto pela CPU para concluír as requisições solicitadas pelo processo. Este contador pode ser desabilidado pela procedure.
DiskIO:
- Quantidade de leituras e escritas realizadas pelo processo. Este contador pode ser desabilidado pela rotina em execução.
LastBatch:
- Data e hora da ultima execução do processo.
ProgramName:
- Nome do programa que iniciou a conexão com o banco de dados. Neste caso, nem sempre será preenchido, pois a biblioteca de conexão do SQL Server não exige que seja especificado o nome do programa ao se conectar com o banco.
RequestID:
- Informa o ID do processo que solocitou a execução deste.
Agora que sabemos o que significa cada campo da procedure SP_WHO2, você está apto a ler o segundo artigo, que mostra como gerenciar os processos em execução. Até lá!
Se você ficou com alguma dúvida sobre os assuntos abordados nestes, sinta-se livre para postar um comentário a respeito.
Abs,
Afonso Lage.