首页 > 数据库 >sql server 查找阻塞

sql server 查找阻塞

时间:2023-03-29 16:33:30浏览次数:36  
标签:handle bl server 查找 spid sql SELECT blocked

CREATE  PROCEDURE [dbo].[sp_who_lock]
AS
    BEGIN

        DECLARE @spid INT ,
            @bl INT ,
            @intTransactionCountOnEntry INT ,
            @intRowcount INT ,
            @intCountProperties INT ,
            @intCounter INT,
            @sql_handle VARBINARY(64)

        DECLARE @tmp_lock_who TABLE 
            (
              id INT IDENTITY(1, 1) ,
              spid SMALLINT ,
              bl SMALLINT,
              sql_handle VARBINARY(64)
            )
 
        IF @@ERROR <> 0
            RETURN @@ERROR
        ;
        WITH tb_blocked AS(
            SELECT spid, blocked, sql_handle FROM master..sysprocesses WHERE blocked > 0
        )
        INSERT  INTO @tmp_lock_who
                ( spid ,
                  bl, sql_handle
                )
        SELECT DISTINCT  blocked,0, p_bl.sql_handle
        FROM    tb_blocked
            CROSS APPLY (SELECT p_bl.sql_handle FROM master..sysprocesses p_bl WHERE p_bl.spid = tb_blocked.blocked) p_bl
        WHERE   NOT EXISTS ( SELECT *
                                FROM   tb_blocked a
                                WHERE  tb_blocked.blocked = a.spid )
        UNION ALL
        SELECT spid, blocked, sql_handle FROM tb_blocked

        IF @@ERROR <> 0
            RETURN @@ERROR
 
-- 找到临时表的记录数
        SELECT  @intCountProperties = COUNT(*),
                @intCounter = 1
        FROM    @tmp_lock_who
 
        IF @@ERROR <> 0
            RETURN @@ERROR
 
        IF @intCountProperties = 0
            SELECT  '现在没有阻塞和死锁信息' AS message
-- 循环开始
        WHILE @intCounter <= @intCountProperties
            BEGIN
-- 取第一条记录
                SELECT  @spid = spid, @bl = bl,    @sql_handle = sql_handle
                FROM    @tmp_lock_who
                WHERE   id = @intCounter
                BEGIN
                    IF @bl = 0
                    BEGIN
                        SELECT '阻塞根源' + CAST(@spid AS VARCHAR(10)) AS [description], text AS [sql_text] FROM sys.dm_exec_sql_text(@sql_handle) AS dest
                    END
                    ELSE
                    BEGIN
                        SELECT CAST(@spid AS VARCHAR(10)) + '被' + CAST(@bl AS VARCHAR(10)) + '阻塞' AS [description], text AS [sql_text] FROM sys.dm_exec_sql_text(@sql_handle) AS dest
                    END
                    DBCC INPUTBUFFER(@spid)
                END
-- 循环指针下移
                SET @intCounter = @intCounter + 1
            END

        RETURN 0
    END
GO

  

引用 https://www.cnblogs.com/VicLiu/p/14229757.html

 

标签:handle,bl,server,查找,spid,sql,SELECT,blocked
From: https://www.cnblogs.com/omsql/p/17269432.html

相关文章

  • windows安装和配置mysql数据库
    1.官网下载mysql8的安装包下载地址:https://dev.mysql.com/downloads/mysql/下载完毕后将安装包解压到指定目录下。(需要全英文路径)2.编辑mysql配置文件在指定的目录下新建一......
  • Flask框架 之Flask-SQLAlchemy操作数据库
    一、代码fromflaskimportFlaskfromflask_sqlalchemyimportSQLAlchemyfromsqlalchemyimportdescclassConfig(object):'''sqlalchemy参数配置'''......
  • MySQL查看修改存储引擎总结
    本文总结了MySQL下查看、修改存储引擎的一些方法。测试、验证环境为MySQL5.6,如有差异,请以实际版本为准。1:查看MySQL的存储引擎信息 1.1使用showengines命令。 ......
  • sql 过滤重复字段,取最早或最新记录
    --可以将重复字段,取最早的一次,同理,也可以取时间最新的一次--方法一withtmpas(selectrow_number()over(partitionby分组字段orderby时间字段)i,......
  • Node.js:模块查找,引用及缓存机制
    1.Node.js的模块载入方式与机制Node.js中模块可以通过文件路径或名字获取模块的引用。模块的引用会映射到一个js文件路径,除非它是一个Node内置模块。Node的内置模块公开了......
  • Node.js: 如何退出node命令或者node server
    如果是要退出node命令的话,可以使用:$node>9+2332>process.exit()$ 或者$node>9+2332>.exit$ 如果是要退出nodeserver的话,可以使用:  别人是推荐点击两......
  • MySQL之MHA高可用配置及故障切换实例
      一、MHA概述1.1MHA是什么MHA(MasterHighAvailability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA的出现就是解决MySQL单点的问......
  • MySQL GTID主从复制
    MySQL在5.6的版本推出了GTID复制,相比传统的复制,GTID复制对于运维更加友好,这个事务是谁产⽣,产⽣多少事务,⾮常直接的标识出来,当然GTID也有限制,对于什么是GTID可以参考我之前......
  • MyCAT实现MySQL的读写分离
     在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变......
  • mysql结合binlog实现数据误删误改后的数据恢复
    mysql结合binlog实现数据误删误改后的数据恢复测试数据:建表CREATETABLE`student`(`id`intNOTNULLAUTO_INCREMENT,`name`varchar(255)COLLATEutf8mb4_gener......