SQL Server中死锁排查

sqlserver 死锁 it

(1). 使用SQL Server的系统存储过程sp_who和sp_lock

 

可以查看当前数据库中的锁情况;进而根据objectID(@objID)(SQL Server 2005)/ object_name(@objID)(Sql Server 2000)可以查看哪个资源被锁,用dbcc ld(@blk),可以查看最后一条发生给SQL Server的Sql语句;

 


CREATE Table #Who(spid int,
    ecid int,
    status nvarchar(50),
    loginname nvarchar(50),
    hostname nvarchar(50),
    blk int,
    dbname nvarchar(50),
    cmd nvarchar(50),
    request_ID int);

CREATE Table #Lock(spid int,
    dpid int,
    objid int,
    indld int,
    [Type] nvarchar(20),
    Resource nvarchar(50),
    Mode nvarchar(10),
    Status nvarchar(10)
);

INSERT INTO #Who
    EXEC sp_who active  --看哪个引起的阻塞,blk
INSERT INTO #Lock
    EXEC sp_lock  --看锁住了那个资源id,objid

DECLARE @DBName nvarchar(20);
SET @DBName='NameOfDataBase'

SELECT #Who.* FROM #Who WHERE dbname=@DBName
SELECT #Lock.* FROM #Lock
    JOIN #Who
        ON #Who.spid=#Lock.spid
            AND dbname=@DBName;

--最后发送到SQL Server的语句
DECLARE crsr Cursor FOR
    SELECT blk FROM #Who WHERE dbname=@DBName AND blk<<0;
DECLARE @blk int;
open crsr;
FETCH NEXT FROM crsr INTO @blk;
WHILE (@@FETCH_STATUS = 0)
BEGIN;
    dbcc inputbuffer(@blk);
    FETCH NEXT FROM crsr INTO @blk;
END;
close crsr;
DEALLOCATE crsr;

--锁定的资源
SELECT #Who.spid,hostname,objid,[type],mode,object_name(objid) as objName FROM #Lock
    JOIN #Who
        ON #Who.spid=#Lock.spid
            AND dbname=@DBName
    WHERE objid<<0;

DROP Table #Who;
DROP Table #Lock;

 

 

 

分析死锁

 

中查看该文件。

 

 

 

参考资料: sql server中的死锁   http://www.studyofnet.com/news/335.html

 


相关推荐

  • SQL Server 2005数据库死锁问题 数据库操作的死锁是不可避免的,本文并不打算讨论死锁怎样产生,重点在于解决死锁,通过SQLServer2005,现在似乎有了一种新的解决办法。  将下面的SQL语句放在两个不同的连接里面,并且在5秒内同时执行,将会发生死锁。useNorthw
  • Windwos Server 2003故障排查 WindowsServer2003系列操作系统中提供的许多工具对于排查硬件和软件问题都很有帮助,特别适合使用2003操作系统的网络管理员使用。其中许多工具主要不是作为故障排查工具提供的,但它们可以用来诊断问题。熟悉可用于故障排查的各种工具并
  • 死锁与优先级反转 一、死锁1.基本概念死锁:死锁指的是系统中并发执行的多个线程(进程)由于无法获所需的资源而永久阻塞的状态。死锁产生的必要条件:排它性互斥:指的是资源在任意时刻只能由一个任务(线程或进程)使用。如果此时还有其它任务请求该资源,则请求者只能等待
  • atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案  v3 q39 atitit.线程死锁卡住无反应的原因incmd调用的解决方案v3q391.问题::线程死锁卡住无反应11.1.分类::cmd调用,netio,fileio调用,multithread调用samevar的时候儿..11.2.原因readLi
  • 如何避免Java多线程中的死锁 Java多线程中的死锁,死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:1.互斥条
  • 死锁的概念 死锁的概念在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。例如:·事务A获取了行1的共享锁。·事务B获取了行2的共享锁。·现在,事务A请求行2的排他锁,但在事务B完成并释放其对行2持有
  • 中移动悄然“封锁”十省WAP 免费WAP遭遇生死劫 中移动悄然“封锁”十省WAPWAP网站正寻找对策,希望能与运营商“公平”相处  早报记者严丹虹  早报财经版昨天报道的“中移动招安在即WAP被迫裁员”又有新进展:中移动已悄然开始对WAP(无线应用协议)“动刀”。记者昨日从知情人士处最新获悉
  • IIS服务请求时的死锁、挂起解决方案(转) IIS服务请求时的死锁、挂起解决方案  2010-05-1910:50症状使从ASP.NET调用XMLWebservices时应用您可能会遇到争用、性能下降和死锁。客户端可能会报告请求停止响应(或"挂起")或需要执...使从ASP.NET调
  • mysql 死锁相关 今天在公司项目里遇到一个mysql死锁问题,进入mysql使用showengineinnodbstatus;命令查看到发生死锁时运行的sql语句分别是updatevehicledeviceinfosetcarlicense='吉CE9132
  • 数据库死锁检测和解决方式 做性能测试或者线上环境并发量比较大的时候经常出现数据库死锁的情况,下面介绍几种数据库死锁的检测方式和解决方式。都是采用sql命令实现的。如果不用命令行也可以通过查看数据库服务器的日志信息进行死锁检测,默认位置是mysql安装目录下的.err
  • 如何避免Java线程死锁 http://www.iteye.com/topic/9082Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键。不幸的是,使用上锁会带来其他问题。让我们来看一些常见问题以及相应的解决方法。  Java线程死锁需
  • Server Tomcat v6.0 Server at localhost was unable to&nbs 修改workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml文件。<BR>server-type="org.eclipse.jst.server.g

你的评论

就没有什么想说的吗?

最新博客

关于我们 免责声明 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X