最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

查询Sqlserver数据库死锁的一个存储过程分享

来源:懂视网 责编:小采 时间:2020-11-09 07:05:12
文档

查询Sqlserver数据库死锁的一个存储过程分享

查询Sqlserver数据库死锁的一个存储过程分享:使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道哪个进程出现了死锁,出现死锁的问题在哪里.
推荐度:
导读查询Sqlserver数据库死锁的一个存储过程分享:使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道哪个进程出现了死锁,出现死锁的问题在哪里.

使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道哪个进程出现了死锁,出现死锁的问题在哪里.

创建sp_who_lock存储过程

CREATE procedure sp_who_lock 
as 
begin 
 declare @spid int 
 declare @blk int 
 declare @count int 
 declare @index int 
 declare @lock tinyint 
 set @lock=0 
 create table #temp_who_lock 
 ( 
 id int identity(1,1), 
 spid int, 
 blk int 
 ) 
 if @@error<>0 return @@error 
 insert into #temp_who_lock(spid,blk) 
 select 0 ,blocked 
 from (select * from master..sysprocesses where blocked>0)a 
 where not exists(select * from master..sysprocesses where a.blocked =spid and blocked>0) 
 union select spid,blocked from master..sysprocesses where blocked>0 
 if @@error<>0 return @@error 
 select @count=count(*),@index=1 from #temp_who_lock 
 if @@error<>0 return @@error 
 if @count=0 
 begin 
 select '没有阻塞和死锁信息' 
 return 0 
 end 
 while @index<=@count 
 begin 
 if exists(select 1 from #temp_who_lock a where id>@index and exists(select 1 from #temp_who_lock where id<=@index and a.blk=spid)) 
 begin 
 set @lock=1 
 select @spid=spid,@blk=blk from #temp_who_lock where id=@index 
 select '引起数据库死锁的是: '+ CAST(@spid AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' 
 select @spid, @blk 
 dbcc inputbuffer(@spid) 
 dbcc inputbuffer(@blk) 
 end 
 set @index=@index+1 
 end 
 if @lock=0 
 begin 
 set @index=1 
 while @index<=@count 
 begin 
 select @spid=spid,@blk=blk from #temp_who_lock where id=@index 
 if @spid=0 
 select '引起阻塞的是:'+cast(@blk as varchar(10))+ '进程号,其执行的SQL语法如下' 
 else 
 select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@blk AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下' 
 dbcc inputbuffer(@spid) 
 dbcc inputbuffer(@blk) 
 set @index=@index+1 
 end 
 end 
 drop table #temp_who_lock 
 return 0 
end 
GO

在查询分析器中执行:

exec sp_who_lock

直到最后的结果为:**

您可能感兴趣的文章:

  • SqlServer查询和Kill进程死锁的语句
  • sqlserver进程死锁关闭的方法
  • 查找sqlserver查询死锁源头的方法 sqlserver死锁监控
  • sql server 2000阻塞和死锁问题的查看与解决方法
  • 如何捕获和记录SQL Server中发生的死锁
  • 利用sys.sysprocesses检查SqlServer的阻塞和死锁
  • SqlServer表死锁的解决方法分享
  • SQLServer 中的死锁说明
  • Sql Server 死锁的监控分析解决思路
  • 声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    查询Sqlserver数据库死锁的一个存储过程分享

    查询Sqlserver数据库死锁的一个存储过程分享:使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道哪个进程出现了死锁,出现死锁的问题在哪里.
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top