Sql数据库查询当前环境有无死锁

Posted 未将对象引用设置到对象的实例

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql数据库查询当前环境有无死锁相关的知识,希望对你有一定的参考价值。

 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

 

以上是关于Sql数据库查询当前环境有无死锁的主要内容,如果未能解决你的问题,请参考以下文章

使用 Monitor 线程插入查询时 SQL 中的死锁 [关闭]

SQLServer 2008数据库查看死锁堵塞的SQL语句

sql 死锁查看

SQL SERVER 集合

试图防止这种死锁发生在我在 SQL Server 上的 .NET 代码中

SQL Server数据库阻塞,死锁查询