SQL死锁的分析

一、通过 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、在查询分析器中,招待了事务代码(包括存储过程)在代码没有完成执行中,强制结束的(等于代码中忘记写事务提交代码),需要将当前的查询页关闭。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值