原文:sqlserver 出现sql被锁时,查看加锁和被锁的sql

DECLARE @spid INT

DECLARE @blk INT

DECLARE @count INT

DECLARE @index INT

DECLARE @lock TINYINT

 

SET @lock=0

 

CREATE TABLE #temp_who_lock

  (

     id   INT IDENTITY(1, 1),

     spid INT,

     blk  INT

  )

 

--if @@error<>0 return @@error    

INSERT INTO #temp_who_lock

            (spid,

             blk)

SELECT 0,

       blocked

FROM   (SELECT *

        FROM   master..sysprocesses

        WHERE  blocked > 0)a

WHERE  NOT EXISTS(SELECT *

                  FROM   master..sysprocesses

                  WHERE  a.blocked = spid

                         AND blocked > 0)

UNION

SELECT spid,

       blocked

FROM   master..sysprocesses

WHERE  blocked > 0

 

--if @@error<>0 return @@error    

SELECT @count = Count(*),

       @index = 1

FROM   #temp_who_lock

 

--select @count,@index

 

--if @@error<>0 return @@error    

IF @count = 0

  BEGIN

      SELECT '没有阻塞和死锁信息'

  --return 0    

  END

 

WHILE @index <= @count

  BEGIN

      IF EXISTS(SELECT 1

                FROM   #temp_who_lock a

                WHERE  id > @index

                       AND EXISTS(SELECT 1

                                  FROM   #temp_who_lock

                                  WHERE  id <= @index

                                         AND a.blk = spid))

        BEGIN

            SET @lock=1

 

            SELECT @spid = spid,

                   @blk = blk

            FROM   #temp_who_lock

            WHERE  id = @index

 

            SELECT  '引起数据库死锁的是: ' + Cast(@spid AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' ;

 

            SELECT @spid,

                   @blk

 

        

 

            DBCC inputbuffer(@spid)

             

 

            DBCC inputbuffer(@blk)

        END

 

      SET @index=@index + 1

  END

 

IF @lock = 0

  BEGIN

      SET @index=1

 

      WHILE @index <= @count

        BEGIN

            SELECT @spid = spid,

                   @blk = blk

            FROM   #temp_who_lock

            WHERE  id = @index

 

            IF @spid = 0

              SELECT '引起阻塞的是:' + Cast(@blk AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'

            ELSE

              SELECT '进程号SPID:' + Cast(@spid AS VARCHAR(10)) + '被' + '进程号SPID:' + Cast(@blk AS VARCHAR(10)) + '阻塞,其当前进程执行的SQL语法如下'

 

            PRINT ( LTRIM(@spid) + ''+ LTRIM(@blk));

            if(@spid <> 0)

            BEGIN

               DBCC inputbuffer(@spid)   --

             END

 

            DBCC inputbuffer(@blk)   --引起阻塞语句

 

            SET @index=@index + 1

        END

  END

 

DROP TABLE #temp_who_lock

 

 

 

 

------------------

sqlserver 出现sql被锁时,查看加锁和被锁的sql的更多相关文章

  1. 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...

  2. JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁,

    如果需要查看具体的synchronized和lock的实现原理,请参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理(百度) 在并发编程中,经常遇到多个线程访问同一个 ...

  3. sqlserver锁表查看

    sp_lock--查询哪个进程锁表了,spid:进程ID,ObjId:对象ID EXEC sp_executesql N'KILL [spid]'--杀进程 select object_name([O ...

  4. SQLServer 查询使用键查找时锁申请及释放顺序

    最近看了高兄的一篇文章,Sql Server 高频,高并发访问中的键查找死锁解析,很有收获,里面讲到了键查找引起的死锁问题. 当然看的过程中,其实自己有个疑问: 对于键查找这类查询,会申请哪些锁,锁申 ...

  5. sql server update时,是行锁还是表锁

    https://bbs.csdn.net/topics/120000749 http://www.cnblogs.com/s021368/articles/2148659.html 问题: udpat ...

  6. SQL Server 查看当前活动的锁

    第一步: 要查看活动中的锁,如果日前根本就没有活动中的锁怎么办,还好我会自己做一把. begin tran         select * from dbo.Nums         with(ta ...

  7. InnoDB中锁的模式,锁的查看,算法

    InnoDB中锁的模式   Ⅰ.总览 S行级共享锁lock in share mode X行级排它锁增删改 IS意向共享锁 IX意向排他锁 AI自增锁 Ⅱ.锁之间的兼容性 兼 X IX S IS X ...

  8. SQL SERVER锁(LOCK)知识及锁应用

    提示:这里所摘抄的关于锁的知识有的是不同sql server版本的,对应于特定版本时会有问题. 一 关于锁的基础知识 (一). 为什么要引入锁 当多个用户同时对数据库的并发操作时会带来以下数据不一致的 ...

  9. 浅谈SQL Transaction在请求中断后的行锁表锁

    最近在维护Web Service接口时,由于数据数据量达到千万级别,接口调用不时出现错误让人不胜烦恼,经过性能测试查出瓶颈在数据库数据处理上,可着实忙了一番.相信众多程序猿和DBA都会头痛性能的问题, ...

随机推荐

  1. 系统编程--标准IO

    1.流和FILE对象 对于国际字符集,一个字符可以由一个以上的字节来表示.标准I/O文件流可以用来操作单字节和多字节(宽,wide)字符集.一个流的方向(orientation)决定了字符是以单字节还 ...

  2. VS调试时不捕捉Exception

    在方法上添加 [DebuggerHidden] 这样,发生错误的时候,VS就不会捕捉到这个错误,否则,会在错误的地方中断. [DebuggerHidden] public void DeleteAll ...

  3. Could not automatically select an Xcode project. Specify one in your Podfile like so

    需要将Podfile文件放置在根目录下,而不能放置在项目的里面. 更改路径即可

  4. hexo站点地图

    将网站链接提交到百度 百度搜索引擎提交入口 有三种验证方式,我选择Html标签验证,在themes\next\layout\_partials\head.swing中添加验证代码: <meta ...

  5. 【DNS】DNS的几个基本概念

    一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服 ...

  6. [洛谷P4841]城市规划

    题目大意:求$n$个点的带标号的无向连通图的个数 题解:令$F(x)$为带标号无向连通图个数生成函数,$G(x)$为带标号无向图个数生成函数 那么$G(x) = \sum_{i=0}^{\infty} ...

  7. BZOJ3236 [Ahoi2013]作业 【莫队 + 树状数组】

    题目链接 BZOJ3236 题解 没想到这题真的是如此暴力 #include<algorithm> #include<iostream> #include<cstring ...

  8. BAT脚本编写教程入门提高篇

    BAT脚本编写教程入门提高篇 批处理文件的参数 批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”. %[1-9]表示参数,参数是指在运行批处理 ...

  9. [ CodeVS冲杯之路 ] P1214

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1214/ 这道题类似于最长区间覆盖,仅仅是将最长区间改成了最多线段,我们贪心即可 先将线段直接右边-1,然后按左边为第一 ...

  10. 取代VS, sourceISight的IDE神器CLION

    https://www.jetbrains.com/clion/download/download-thanks.html 随时升级 http://idea.lanyus.com/ m_pRemoti ...