如何处理Sql server中的死锁问题

 时间:2026-02-16 23:54:29

1、用数据库sa用户登录。

2、创建民激查询死锁的存储过程。

--找引发锁的sql

create  procedure pro_killsid

as 

begin 

declare @spid int,@bl int, 

@intTransactionCountOnEntry  int, 

@intRowcount    int, 

@intCountProperties   int, 

@intCounter    int

create table #tmp_lock_who ( 

id int identity(1,1), 

spid smallint, 

bl smallint)

IF @@ERROR<薪囊>0 RETURN @@ERROR

insert into #tmp_lock_who(spid,bl) select  0 ,blocked 

from (select * from sysprocesses where  blocked>0 ) a 

where not exists(select * from (select * from sysprocesses where  blocked>0 ) b 

where a.blocked=spid) 

union select spid,blocked from sysprocesses where  blocked>0

IF @@ERROR<>0 RETURN @@ERROR 

select  @intCountProperties = Count(*),@intCounter = 1 

from #tmp_lock_who

IF @@ERROR<>0 RETURN @@ERROR

if @intCountProperties=0 

select '现在没有阻塞和死锁信息' as message

while @intCounter <= @intCountProperties 

begin 

select  @spid = spid,@bl = bl 

from #tmp_lock_who where Id = @intCounter 

begin 

if @spid =0 

select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号。其执行的SQL语法如下' 

else 

select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下' 

DBCC INPUTBUFFER (@bl ) 

end

set @intCounter = @intCounter + 1 

end

drop table #tmp_lock_who

return 0 

end

3、执行创建的存储过程。

用master执行存储过程:execute  pro_killsid

4、Kill掉死锁的进程SID号。

5、再用master执行存储过程:execute  pro_killsid

检测是否还有死锁。三阅欠 

  • windows查看wifi密码
  • 微信上如何添加信用卡信息
  • excel如何关闭插入图片功能?
  • 局域网中得到其他电脑在哪
  • Web服务器如何设置远程连接仅限于Windows凭据
  • 热门搜索
    南通旅游景点大全 中国最佳旅游胜地 厦门岛内旅游景点 邢台旅游景点大全图 军都旅游度假村 趣途旅游网 云南墨江旅游 旅游路二手房 青岛旅游景点地图 开县旅游