死锁查看处理(一)

1、exec sp_who2 执行存储过程查看那些语句处于挂起或者阻塞状态。

执行结构
spid 表示当前回话ID 唯一的
status表示状态当前执行的状态 当状态为SUSPENDED时说明当前语句为挂起状态
HostName 表示回话客户端的计算机名称
Blkby 表示的是令当前回话阻塞的其他回话ID。正常表示为 .
DBName 表示当前回话连接的数据库名称

状态为SUSPENDED 时,需要查看列Blkby列是否为空,为空表示是挂起的头部。
若Blkby列为数字@spid,则需要根据@spid来查找列SPID中对应的@spid行的信息,依次循环查找到Blkby为空的行,则此回话则为阻塞的头部。

2、DBCC INPUTBUFFER(72) 查看回话ID72 当前执行的sql语句,EventInfo列为执行语句。
这里写图片描述

3、Kill 72 ,解除死锁需要kill掉阻塞的头spid ,若spid72 ,则执行

kill 72

4、sp_who2简化去掉正常的回话,可执行 exec GetLock 存储过程
code:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <YSH>
-- Create date: <20140722>
-- Description: <查看锁表原因>
-- =============================================
create PROCEDURE GetLock 
AS
BEGIN
  declare @tblDetail varchar(60),@nowsj varchar(10),
          @sql varchar(8000),@where varchar(8000)

  set @nowsj= replace(convert(varchar,getdate(),114),':','')
  set @tblDetail='tblLock'+convert(varchar,@@spid)+@nowsj

  set @sql='create table '+@tblDetail+'
            (
               spid varchar(10),
               [Status] varchar(50),
               [Login]  varchar(50), 
               HostName varchar(100),
               BlkBy varchar(10),
               DBName varchar(100),
               Command varchar(100),
               CPUTime bigint,
               DiskIO bigint,
               LastBatch varchar(20),
               programName varchar(100),
               spid1 varchar(10),
               REQUESTID varchar(10)
             ) ' 
  --print @sql
  exec(@sql)

  set @sql='insert '+@tblDetail+' exec sp_who2 '
  --print @sql
  exec(@sql)

  ---查找阻塞其他连接的连接
  set @sql='select * from '+@tblDetail+' MX
            where Rtrim(Ltrim(blkby))=''.'' 
                 and exists(select * from '+@tblDetail+' A where A.blkby=MX.spid) 
            order by spid '
  --print @sql
  exec(@sql)

  ---查找被其他连接阻塞的连接 以及 阻塞其他连接的连接
  set @sql='select * from '+@tblDetail+' MX
            where Rtrim(Ltrim(blkby))<>''.'' 
                 or exists(select * from '+@tblDetail+' A where A.blkby=MX.spid) 
            order by spid '
  --print @sql
  exec(@sql)

  exec('drop table '+@tblDetail)

END
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值