• 查询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/

  • 相关阅读:
    JavaScript Hoisting
    关于性能工具
    JavaScript 新旧替换五:函数嵌套
    JavaScript 新旧替换四:继承
    JavaScript 新旧替换三:参数转换
    JavaScript 新旧替换二:赋值和取值
    test
    这么多数组方法,你掌握了么?
    问问自己,你真的会用防抖和节流么????
    防抖、节流、闭包的真谛所在
  • 原文地址:https://www.cnblogs.com/jiguixin/p/1931814.html
Copyright © 2020-2023  润新知