您的位置:首页 > 数据库

SQL死锁的分析

2018-01-10 13:25 274 查看
一、通过 SQL语句找出死锁的进程ID。

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

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;二、打开活动监视器 在进程序标签中找到 对应的进程ID
三、右击查看“详细信息”可以知道是哪些 SQL 语句造成的死锁,可以右击结束过程。

四、注意事项:

     1、代码中写了事务,但忘记了提交事务代码。会造成死锁。

     2、在查询分析器中,招待了事务代码(包括存储过程)在代码没有完成执行中,强制结束的(等于代码中忘记写事务提交代码),需要将当前的查询页关闭。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: