加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL2005查询死锁存储过程sp_who_lock

发布时间:2023-08-01 15:24:13 所属栏目:MsSql教程 来源:
导读:下面是我整理的监控sql server数据库,在性能测试过程中是否出现死锁、堵塞的sql语句,还算比较准备,留下来备用。

调用方法:选中相应的数据库,执行exec sp_who_lock

rush:sql;"> USE [master] GO SET ANS
下面是我整理的监控sql server数据库,在性能测试过程中是否出现死锁、堵塞的sql语句,还算比较准备,留下来备用。
 
调用方法:选中相应的数据库,执行exec sp_who_lock
 
rush:sql;"> USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
 
CREATE procedure [dbo].[sp_who_lock]
 
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
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章