数据库死锁怎么办,查看数据库死锁的sql语句

发布时间:2019-12-06编辑:脚本学堂
一个查看数据库死锁的sql语句,数据库死锁死锁问题可以用这个存储过程查看,需要的朋友参考下。

数据库死锁怎么办,查看数据库死锁的sql语句

查看数据库死锁的sql语句:
 

复制代码 代码示例:
go
use master
go
declare @spid int,@bl int
DECLARE s_cur CURSOR FOR
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
OPEN s_cur
FETCH NEXT FROM s_cur INTO @spid,@bl
WHILE @@FETCH_STATUS = 0
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 )
FETCH NEXT FROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur

执行存储过程,查看死锁:
 

exec sp_who2

运行sp_who2 ,看blk by 栏, 如果这栏不是空白, 有一个数字, 这就是造成阻塞(blocking)的线程id。

然后,运行:
DBCC Inputbuffer(线程id), 即可知此线程在干什么。

更多有关数据库死锁问题的解决方法,请点这里查看,以快速解决问题。