zoukankan      html  css  js  c++  java
  • 查询Sql Server 2005的堵塞情况(死锁)

    SET QUOTED_IDENTIFIER ON
     
    GO
    SET ANSI_NULLS ON
    GO
     
    CREATE PROCEDURE sp_who_lock
    AS
        BEGIN
            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
                RETURN @@ERROR
     
            INSERT INTO #tmp_lock_who ( spid, bl )
                    SELECT 0, blocked
                        FROM ( SELECT *
                                FROM sys.sysprocesses
                                WHERE blocked > 0
                             ) a
                        WHERE NOT EXISTS ( SELECT *
                                            FROM ( SELECT *
                                                    FROM sys.sysprocesses
                                                    WHERE blocked > 0
                                                 ) b
                                            WHERE a.blocked = spid )
                    UNION
                    SELECT spid, blocked
                        FROM sys.sysprocesses
                        WHERE blocked > 0
     
            IF @@ERROR <> 0
                RETURN @@ERROR
     
           -- 找到临时表的记录数
            SELECT @intCountProperties = COUNT(*), @intCounter = 1
                FROM #tmp_lock_who
     
            IF @@ERROR <> 0
                RETURN @@ERROR
     
            IF @intCountProperties = 0
                SELECT N'现在没有阻塞和死锁信息' AS message
           -- 循环开始
            WHILE @intCounter <= @intCountProperties
                BEGIN
                  -- 取第一条记录
                    SELECT @spid = spid, @bl = bl
                        FROM #tmp_lock_who
                        WHERE Id = @intCounter
                    BEGIN
                        IF @spid = 0
                            SELECT N'引起数据库死锁的是: ' + CAST(@bl AS VARCHAR(10))
                                    + N'进程号,其执行的SQL语法如下'
                        ELSE
                            SELECT N'进程号SPID:' + CAST(@spid AS VARCHAR(10))
                                    + N'被进程号SPID:' + CAST(@bl AS VARCHAR(10)) N'阻塞,其当前进程执行的SQL语法如下'
                        DBCC INPUTBUFFER (@bl )
                    END
     
                  -- 循环指针下移
                    SET @intCounter = @intCounter + 1
                END
     
     
            DROP TABLE #tmp_lock_who
     
            RETURN 0
        END
    go
    EXEC sp_who_lock
    DROP PROC  sp_who_lock
     
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO

    转自:http://cnsicau.blog.163.com/blog/static/20889493201072610404174/

  • 相关阅读:
    计算机世界中解决问题的三种技术手段
    应用程序池的经典模式与集成模式的区别
    sh文件的编译
    flex学习开始了
    com,ActiveX,Ole之间的关系学习总结
    "正在等待localhost。。”问题的解决
    一些感悟
    面向对象软件工程方法学实践【转】
    外连接在sqlserver和access之间的差异
    外连接在sqlserver和access之间的差异
  • 原文地址:https://www.cnblogs.com/jiguixin/p/1931814.html
Copyright © 2011-2022 走看看