分享:MSSQL找出发生死锁,阻塞的语句并直接KILL掉

USE master 
GO
IF OBJECT_ID('dbo.sp_kill_blocked','P') IS NOT NULL 
DROP PROCEDURE dbo.sp_kill_blocked
GO 
CREATE PROCEDURE dbo.sp_kill_blocked 
AS 
/* 
作者:陈恩辉-弘恩
找出发生死锁,阻塞的语句并直接KILL掉
*/
DECLARE @kill VARCHAR(255) , @dbcc_inputbuffer VARCHAR(255) ;
WITH    cte
          AS ( SELECT   *
               FROM     master.sys.sysprocesses p
               WHERE    p.spid > 50
                        AND p.blocked > 0
             )
    SELECT  @kill = ' kill ' + CAST(blocked AS VARCHAR) ,
            @dbcc_inputbuffer = ' dbcc inputbuffer( ' + CAST(blocked AS VARCHAR) + ')'
    FROM    cte a
    WHERE   NOT EXISTS ( SELECT 1
                         FROM   cte b
                         WHERE  a.blocked = b.spid )
IF @kill IS NOT NULL
    OR @dbcc_inputbuffer IS NOT NULL 
    BEGIN                          
        SELECT  GETDATE() AS exec_time ,
                @kill AS [exec_kill] ,
                @dbcc_inputbuffer AS dbcc_inputbuffer ;
        PRINT @dbcc_inputbuffer 
		PRINT @kill        
        EXEC (@dbcc_inputbuffer)                        
        EXEC (@kill)
    END 
ELSE 
    BEGIN 
        SELECT  GETDATE() AS exec_time ,'没有死锁,请确认!' AS result 
    END 
GO 
 
EXEC sp_Ms_marksystemobject 'sp_kill_blocked'
GO 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值