查询Sqlserver数据库死锁的一个存储过程
2023-09-27 14:26:14 时间
1 use master 2 go 3 4 CREATE procedure sp_who_lock 5 as 6 begin 7 declare @spid int 8 declare @blk int 9 declare @count int 10 declare @index int 11 declare @lock tinyint 12 set @lock=0 13 create table #temp_who_lock 14 ( 15 id int identity(1,1), 16 spid int, 17 blk int 18 ) 19 20 if @@error<>0 return @@error 21 insert into #temp_who_lock(spid,blk) 22 select 0 ,blocked 23 from (select * from master..sysprocesses where blocked>0)a 24 where not exists(select * from master..sysprocesses where a.blocked =spid and blocked>0) 25 union 26 select spid,blocked from master..sysprocesses where blocked>0 27 28 if @@error<>0 return @@error 29 select @count=count(*),@index=1 from #temp_who_lock 30 if @@error<>0 return @@error 31 if @count=0 32 begin 33 select '没有阻塞和死锁信息' 34 return 0 35 end 36 while @index<=@count 37 begin 38 if exists(select 1 from #temp_who_lock a where id>@index and exists(select 1 from #temp_who_lock 39 where id<=@index and a.blk=spid)) 40 begin 41 set @lock=1 42 select @spid=spid,@blk=blk from #temp_who_lock where id=@index 43 select '引起数据库死锁的是: '+ CAST(@spid AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' 44 select @spid, @blk 45 dbcc inputbuffer(@spid) 46 dbcc inputbuffer(@blk) 47 end 48 set @index=@index+1 49 end 50 if @lock=0 51 begin 52 set @index=1 53 while @index<=@count 54 begin 55 select @spid=spid,@blk=blk from #temp_who_lock where id=@index 56 if @spid=0 57 select '引起阻塞的是:'+cast(@blk as varchar(10))+ '进程号,其执行的SQL语法如下' 58 else 59 select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@blk AS VARCHAR(10)) 60 +'阻塞,其当前进程执行的SQL语法如下' 61 dbcc inputbuffer(@spid) 62 dbcc inputbuffer(@blk) 63 set @index=@index+1 64 end 65 end 66 drop table #temp_who_lock 67 return 0 68 end 69 70 71 GO
在查询分析器中执行:
exec sp_who_lock
直到最后的结果为:
相关文章
- SqlServer收缩数据库语句
- 淡sqlserver对like '%关键词%' 处理时的索引利用问题
- 解决sqlserver数据库显示单个用户
- Mac 下Docker操作SQLServer数据库
- SQLSERVER错误15023:当前数据库中已存在用户或角色
- SQL注入篇——利用SqlServer执行系统命令连接远程桌面
- Android-用webservice连接sqlserver数据库
- 基于QT(C++)+SQLServer实现(WinForm)超市管理系统【100010143】
- java 高效批量插入 sqlserver 数据库
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
- SQLSERVER 数据库查看各表的记录数
- 【sql server日志传送】SqlServer事务日志传送(不停机不在主库加共享文件版本)【log shipping最佳实践】
- sqlserver设置自动备份数据库(转载)
- sqlserver 导出 excel、csv、 Access “不能打开数据库“”。应用程序可能无法识别该数据库,或文件可能损坏。
- SqlServer--delete、truncate 、Drop删除表的区别
- 怎么从sqlserver 数据库导出 insert 的数据语句
- sqlserver使用clr调用ajax,在数据库内请求外部链接
- sqlserver-临时表的生命周期到底有多长
- 如何将特殊字符, 冒号存入SQLServer ?
- 深入了解SQLServer系统数据库工作原理
- 数据库中SQL实现某列的乘积(SqlSERVER)
- sqlserver:rank() over()函数