数据库死锁查询sql

USE [milaibao]
GO
/****** Object:  StoredProcedure [dbo].[sp_who_lock]    Script Date: 11/21/2019 15:59:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[sp_who_lock]
AS 
    BEGIN     
        DECLARE @spid INT     
        DECLARE @blk INT     
        DECLARE @count INT     
        DECLARE @index INT     
        DECLARE @lock TINYINT      
        SET @lock = 0      
        CREATE TABLE #temp_who_lock
            (
              id INT IDENTITY(1, 1) ,
              spid INT ,
              blk INT
            )      
        IF @@error <> 0 
            RETURN @@error      
        INSERT  INTO #temp_who_lock
                ( spid ,
                  blk
                )
                SELECT  0 ,
                        blocked
                FROM    ( SELECT    *
                          FROM      master..sysprocesses
                          WHERE     blocked > 0
                        ) a
                WHERE   NOT EXISTS ( SELECT *
                                     FROM   master..sysprocesses
                                     WHERE  a.blocked = spid
                                            AND blocked > 0 )
                UNION
                SELECT  spid ,
                        blocked
                FROM    master..sysprocesses
                WHERE   blocked > 0      
        IF @@error <> 0 
            RETURN @@error      
        SELECT  @count = COUNT(*) ,
                @index = 1
        FROM    #temp_who_lock      
        IF @@error <> 0 
            RETURN @@error      
        IF @count = 0 
            BEGIN     
                SELECT  '没有阻塞和死锁信息'     
                RETURN 0      
            END     
        WHILE @index <= @count 
            BEGIN     
                IF EXISTS ( SELECT  1
                            FROM    #temp_who_lock a
                            WHERE   id > @index
                                    AND EXISTS ( SELECT 1
                                                 FROM   #temp_who_lock
                                                 WHERE  id <= @index
                                                        AND a.blk = spid ) ) 
                    BEGIN     
                        SET @lock = 1      
                        SELECT  @spid = spid ,
                                @blk = blk
                        FROM    #temp_who_lock
                        WHERE   id = @index     
                        SELECT  '引起数据库死锁的是: ' + CAST(@spid AS VARCHAR(10))
                                + '进程号,其执行的SQL语法如下'     
                        SELECT  @spid ,
                                @blk    
                        DBCC inputbuffer(@spid)      
                        DBCC inputbuffer(@blk)      
                    END     
                SET @index = @index + 1      
            END     
        IF @lock = 0 
            BEGIN     
                SET @index = 1      
                WHILE @index <= @count 
                    BEGIN     
                        SELECT  @spid = spid ,
                                @blk = blk
                        FROM    #temp_who_lock
                        WHERE   id = @index     
                        IF @spid = 0 
                            SELECT  '引起阻塞的是:' + CAST(@blk AS VARCHAR(10))
                                    + '进程号,其执行的SQL语法如下'     
                        ELSE 
                            SELECT  '进程号SPID:' + CAST(@spid AS VARCHAR(10))
                                    + '被' + '进程号SPID:'
                                    + CAST(@blk AS VARCHAR(10))
                                    + '阻塞,其当前进程执行的SQL语法如下'     
                        DBCC inputbuffer(@spid)    
                        DBCC inputbuffer(@blk)      
                        SET @index = @index + 1      
                    END     
            END     
        DROP TABLE #temp_who_lock      
        RETURN 0      
    END           
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acycwf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值