ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

查询SQL死锁

2021-11-08 12:58:52  阅读:174  来源: 互联网

标签:bl ERROR 查询 INT 死锁 spid SQL SELECT blocked


DECLARE @spid INT ,
            @bl INT ,
            @intTransactionCountOnEntry INT ,
            @intRowcount INT ,
            @intCountProperties INT ,
            @intCounter INT
        CREATE TABLE #tmp_lock_who
            (
              id INT IDENTITY(1, 1) ,
              spid SMALLINT ,
              bl SMALLINT
            )

        IF @@ERROR <> 0 
            print @@ERROR

        INSERT  INTO #tmp_lock_who
                ( spid ,
                  bl
                )
                SELECT  0 ,
                        blocked
                FROM    ( SELECT    *
                          FROM      master..sysprocesses
                          WHERE     blocked > 0
                        ) a
                WHERE   NOT EXISTS ( SELECT *
                                     FROM   ( SELECT    *
                                              FROM      master..sysprocesses
                                              WHERE     blocked > 0
                                            ) b
                                     WHERE  a.blocked = spid )
                UNION
                SELECT  spid ,
                        blocked
                FROM    master..sysprocesses
                WHERE   blocked > 0
        IF @@ERROR <> 0 
            print @@ERROR

-- 找到临时表的记录数
        SELECT  @intCountProperties = COUNT(*) ,
                @intCounter = 1
        FROM    #tmp_lock_who

        IF @@ERROR <> 0 
            print @@ERROR

        IF @intCountProperties = 0 
            SELECT  '现在没有阻塞和死锁信息' AS message
-- 循环开始
        WHILE @intCounter <= @intCountProperties 
            BEGIN
-- 取第一条记录
                SELECT  @spid = spid ,
                        @bl = bl
                FROM    #tmp_lock_who
                WHERE   id = @intCounter
                BEGIN
                    IF @spid = 0 
                        SELECT  '引起数据库慢的是: ' + CAST(@bl AS VARCHAR(10))
                                + '进程号,其执行的SQL语法如下'
                    ELSE 
                        SELECT  '进程号SPID:' + CAST(@spid AS VARCHAR(10)) + '被'
                                + '进程号SPID:' + CAST(@bl AS VARCHAR(10))
                                + '阻塞,其当前进程执行的SQL语法如下'
                    DBCC INPUTBUFFER (@bl )
                END
-- 循环指针下移
                SET @intCounter = @intCounter + 1
            END

        DROP TABLE #tmp_lock_who
        print 0

标签:bl,ERROR,查询,INT,死锁,spid,SQL,SELECT,blocked
来源: https://blog.csdn.net/CXJ0062008/article/details/121205452

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有