原文: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. linux服务器基本安全配置手册

    转:忘了在哪转的,直接复制到笔记里了,贴出来分享 假如你想要搭建一个Linux服务器,并且希望可以长期维护的话,就需要考虑安全性能与速度等众多因素.一份正确的linux基本安全配置手册就显得格外重要. ...

  2. iOS如何隐藏状态栏,包括网络标志、时间标志、电池标志等

    我们在开发App的时候,在遇到有状态栏时,NavigationBar上面的按钮,是极难点击的,所以这个时候,最好我们能够人为的隐藏掉状态栏. 如果一直需要隐藏的话,直接在info.plist里面,添加 ...

  3. Android事件分发机制详解(1)----探究View的事件分发

    探究View的事件分发 在Activity中,只有一个按钮,注册一个点击事件 [java] view plaincopy button.setOnClickListener(new OnClickLi ...

  4. HDU 1709 母函数天平问题 可出现减法的情况 The Balance

    The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. Access连接字符串

    Access2007没有密码连接: <connectionStrings> <add name="myconn" connectionString="P ...

  6. A - 最长上升子序列

    A - 最长上升子序列 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem De ...

  7. 想了一天的题目QAQ 毛线数列的最值

    #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #i ...

  8. Redis客户端命令

    Redis客户端命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. ...

  9. 一种简单高效的音频降噪算法示例(附完整C代码)

    近期比较忙, 抽空出来5.1开源献礼. 但凡学习音频降噪算法的朋友,肯定看过一个算法. <<语音增强-理论与实践>> 中提及到基于对数的最小均方误差的降噪算法,也就是LogMM ...

  10. Pandas之Series

    # Series 数据结构 # Series 是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为索引 import numpy as np impor ...