top of page

SQL Server bloqueando? O guia definitivo da SP Sentinela com intervalo de tempo

há 5 dias
2 min de leitura

Assita ao vídeo demonstrativo.


Bloqueios (blocking) fazem parte da rotina de qualquer banco de dados relacional. Em ambientes concorrentes, é perfeitamente natural que uma transação precise aguardar a conclusão de outra para manter a integridade dos dados.


O verdadeiro problema surge quando scripts de automação genéricos saem derrubando processos sem nenhum critério, ou quando um bloqueio prolongado paralisa operações essenciais do negócio, causando um efeito dominó na aplicação.


Para resolver esse problema de forma controlada, apresentamos a SP Sentinela com intervalo de tempo - SQL Server, uma Stored Procedure parametrizada desenvolvida para identificar e finalizar automaticamente apenas os processos que estão gerando bloqueios acima de um limite de tempo pré-determinado.


O PROBLEMA DOS BLOQUEIOS: QUANDO O TEMPO TORNA-SE CRÍTICO?


Em gestão de banco de dados, o tempo aceitável de bloqueio varia drasticamente conforme o contexto do negócio:


  • Sistemas críticos e tabelas core (exemplo: processamento de pagamentos e checkouts): um bloqueio de apenas 1 minuto em um banco de dados ou tabela de alta rotatividade já é extremamente crítico. Esse tempo é suficiente para gerar gargalos severos, travamento da aplicação para centenas de usuários e até perda de vendas.


  • Ambientes analíticos ou tabelas secundárias: nível de tolerância maior. Um bloqueio de 5 minutos em relatórios ou tabelas auxiliares pode ser um tempo perfeitamente aceitável e não exige intervenção imediata.


Tratar todos os cenários com a mesma regra rígida é um erro comum que pode gerar quedas desnecessárias de conexões operacionais legítimas.


CONHECENDO O SCRIPT


A SP Sentinela com intervalo de tempo - SQL Server recebe como parâmetro de entrada o tempo limite desejado (em minutos). Ela monitora a view sysprocesses, identifica a sessão causadora da retenção (root blocker) e executa o comando KILL apenas se o tempo de espera ultrapassar o limite configurado.


CÓDIGO DA STORED PROCEDURE:


USE [DBManager]

GO


SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO


CREATE PROCEDURE [dbo].[sp_sentinela_param]

@Minutos INT = 10 -- Parâmetro de entrada com valor padrão de 10 minutos

AS

BEGIN

SET NOCOUNT ON;



-- Converte o tempo informado em minutos para milissegundos (utilizado na coluna waittime)

DECLARE @WaitTimeMs INT = @Minutos 60 1000;


DECLARE @DatabaseName NVARCHAR(50);

SET @DatabaseName = DB_NAME();


DECLARE @SQL VARCHAR(MAX);

SET @SQL = '';


-- Monta a string com os comandos KILL para os causadores dos bloqueios

SELECT @SQL = @SQL + 'KILL ' + CONVERT(VARCHAR, SPId) + ';'

FROM master.dbo.sysprocesses

WHERE SPId <> @@SPId

  AND spid IN (

      SELECT blocked 

      FROM master.dbo.sysprocesses 

      WHERE waittime > @WaitTimeMs

        AND blocked > 0 -- Filtro de segurança: garante que existe de fato um bloqueio

  );


-- Exibe os comandos gerados (útil para auditoria/debug)

SELECT @SQL AS Comandos_Kill;


-- Executa a remoção das conexões caso existam bloqueios acima do limite

IF LEN(@SQL) > 0

BEGIN

    EXEC(@SQL);

END

ELSE

BEGIN

    PRINT 'Nenhum processo bloqueando acima do tempo estipulado.';

END


END

GO


EXEMPLO DE USO


Para monitorar e derrubar automaticamente conexões que estejam gerando bloqueios superiores a 5 minutos, basta executar o comando abaixo:


EXEC dbmanager.dbo.sp_sentinela_param 5;




 
 
 

Posts recentes

Ver tudo

2 comentários


Excelente conteúdo! A possibilidade de parametrizar o tempo de bloqueio torna a solução mais flexível e alinhada às necessidades de cada ambiente. Uma abordagem prática que contribui para uma administração mais eficiente do SQL Server. Parabéns pela iniciativa e por compartilhar conhecimento!

Curtir

Muito bom!

Curtir
Logo_quadrada.png

CLOUD DB LTDA - 28.961.479/0001-41

© 2020 Direitos Reservados CloudDB ®  O plágio é considerado crime e sua principal referência é a lei 9.610 - ♥ SEO WIX Partner - Phoenix

bottom of page