Treinamento Online
Segunda-feira, 24 de junho de 2002 às 01h59

Gerenciando Processos no SQL Server

Faltam -1 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.


Galera, esta semana vamos ver um pouco sobre processos no SQL Server.

Processos são uma maneira de visualizarmos a atividade de um servidor SQL Server. Processos são importantes pois é através deles que podemos fazer várias operações cruciais como finalizar uma conexão morta, visualizar locks de objetos, monitorar o progresso de tarefas, etc. Para a galera que trabalha com programação dá para fazer um paralelo entre um processo do SQL Server e uma Thread em um programa cliente/servidor.

Quando um usuário se conecta ao banco de dados (através de qualquer método como o ADO, JDBC, ODBC, etc) um novo ID de processo é criado para aquela conexão de usuário. Porém existem alguns processos internos do SQL Server que não fazem referência a nenhum tipo de conexão. ID's de processo indo de 1 até 50 são internos do SQL Server e valores acima de 50 são relativos a uma conexão de usuário. ID's de processo também são re-utilizáveis.

Para visualizarmos todos os ID de processos atuais no SQL Server assim como algumas propriedades sobre eles, devemos utilizar o Enterprise Manager, escolher o servidor, abrir a pasta Management, clicar no ícone Current Activity e finalmente escolher Process Info. Teremos uma janela similar a esta (painel esquerdo):

Clique na imagem para vê-la em tamanho real

Podemos perceber que várias informações importantes sobre os processos são mostradas: o ID do processo (retornado por @@SPID), o login do usuário no banco, o contexto do banco de dados atual da conexão, Network Address (endereço MAC da placa de rede do client), status do processo, etc.

Também podemos obter a lista de processos atuais no servidor utilizando a Stored Procedure sp_who. Esta Stored procedure consulta a tabela de sistema sysprocesses que está no banco master e ainda nos permite fazer um filtro por login se usuário:

-- Mostra todos os processos que estão sendo executados por um usuário que se logou no banco como sa
exec sp_who 'sa'

Uma vez que sabemos quais os processos, podemos obter qual o ID de processo da nossa conexão e descobrir qual foi o último comando enviado para o servidor por aquele processo:

-- Declara a variável que conterá o ID do processo desta conexão
DECLARE @SP_ID INT

-- Seta a variável
SET @SP_ID = @@SPID

-- Mostra qual o último comando enviado para o servidor pelo processo atual
DBCC INPUTBUFFER (@SP_ID)

Também podemos matar um processo utilizando o comando KILL. O comando KILL mata um processo, derruba a conexão com o cliente e termina qualquer transação pendente desta conexão. Devemos utilizar o comando KILL com cuidado, pois caso contrário os efeitos podem ser bem indesejáveis:

-- Mata a conexão cujo ID é 54
KILL 54

O comando KILL deve ser utilizado em alguns casos em que o processo está 'travado' e ocupando recursos da máquina desnecessários. Um exemplo disto é uma conexão que por algum motivo entrou em um loop infinito.

Por hoje é só pessoal, até a semana que vem.

Nenhum comentário até agora

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.