Blog

Dicas para um DBA Iniciante – Derrubar sessões inativas do servidor de banco de dados

By Vitor Fava

Fala galera, tudo bem?

Recentemente passei por um cenário bem curioso em um dos clientes que presto suporte e quero compartilhar com vocês a solução que utilizei na resolução desse problema.

O cliente em questão possuia um grande número de conexões inativas abertas na instância de banco de dados SQL Server e que causavam problemas no processos executados pelo ERP devido ao limite de usuários simultâneos que podiam utilizar o sistema.

Para resolver essa situação utilizei um script que verifica todas as sessões em estado de sleeping por mais de 24 horas e executa o processo de kill em cada uma delas:


DECLARE @user INT

DECLARE CursorSessoes CURSOR FAST_FORWARD
FOR
SELECT
[SPID]
FROM
[master].dbo.sysprocesses (NOLOCK)
WHERE
--ignorar sessões de sistema
spid>50
AND
--somente sessões com o status de sleeping
[status]='sleeping'
AND
--sessões que estejam em sleeping por mais de 24 horas
DATEDIFF(HOUR,last_batch,GETDATE())>=24
AND
--ignorar a sessão atual
spid<>@@spid

OPEN CursorSessoes

FETCH NEXT FROM CursorSessoes INTO @user

WHILE (@@FETCH_STATUS=0)
BEGIN
PRINT 'Killing '+CONVERT(VARCHAR,@user)
EXEC('KILL '+@user)
FETCH NEXT FROM CursorSessoes INTO @user
END
CLOSE CursorSessoes
DEALLOCATE CursorSessoes
GO

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Fonte: Vitor Fava