if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_who_lock]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_who_lock]
GO
use master
go
create procedure 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
分享到:
相关推荐
SQL server大并发时软件出现卡顿,需要查询是什么SQL执行时引起的卡顿,同时具有干掉死锁进程,非常实用
SQL死锁监控工具
大家在日常工作中,会碰到SQL死锁而造成应用程序无法使用,常见的SQL死锁的处理办法。
此代码运行后,会生成一个存储过程,后面直接调用此存储过程即可查看,运行非常方便,可以快速定位死锁进程,快速解决sql数据库死锁问题。希望可以给各位系统管理员带来方便。希望可以给各位系统管理员带来方便。...
查看SQL死锁信息
SQL死锁-阻塞一般情况下死锁不是一步到位的,它必须满足特定的条件,然后形成资源的循环依赖才会产生死锁,死锁之前一定会出现阻塞,
SQL死锁记录
SQL死锁,的处理方法,文件内容为处理脚本。
sql表死锁解决办法
SQL Server死锁使我们经常遇到的问题,下面就为您介绍如何查询SQL Server死锁,希望对您学习SQL Server死锁方面能有所帮助。
SQLSERVER死锁总结,里面详述基于SQLSERVER数据库如何排查并处理死锁的办法,及死锁产生的原因
数据库死锁,阻塞查询,杀死死锁,阻塞进程
死锁原理、死锁排查、避免死锁、死锁处理方法、两个死锁示例及解决方法、附:锁兼容性(FROM SQL Server 2005 联机丛书)
查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql
select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' else select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞...
SQL SERVER 2008 R2 查看和杀死死锁进程。数据库进程死锁是一个很严重的问题,快速定位到死锁的进程尤为重要。
SQLServler自动杀死死锁进程SQL,直接在SqlServer中执行即可
该脚本为MYSQL数据库中查看死锁的语句,可以查看到死锁的ID,造成死锁的语句以及造成死锁的计算机
本过程自动捕捉SQLSERVER中的死锁进程并且自动杀掉