`

查看ms sqlserver数据库是否有进程死锁

阅读更多
最近我在弄数据库大批时间时,由于时间太长,我就中断了,中断后我先是update看到没有反映,又select,还是不出来,最后delete还是没反映,开始意识到可能是自己太心急了,然后就在一边等,但是五分钟过去了没有反映,十分钟过去了还是没有反映,网上查了查,可能是是数据库死锁了,解开死锁的方法有两个,一个是重启数据库,二就是用kill杀死死锁的进程,但是怎么知道哪个进程死锁了呢?最后还是网上找到了,别人写的存储过程,可以查看数据库死锁的进程,在这里和大家分享一下。

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 master..sysprocesses where blocked>0 ) a
where not exists(select * from (select * from master..sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from master..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


GO

分享到:
评论

相关推荐

    自动检测并解锁的程序(FOR MS SQL SERVER 7/2000及以后的版本)

    原理: 利用ms sql server 的系统存储过程sp_who来列表整个系统进程,并通过blk字段来获得当前是否有进程互相等候,然后找到影响到整个源头的进程并调用kill来取消它。整个系统非常简单。因为调用的系统存储过程是...

    SQL Server锁介绍及死锁原因

    一 死锁产生的原因和解锁的方法  产生死锁的四个必要条件:  (1) 互斥条件:一个资源每次只能被一个进程使用。...  MS-SQL Server 使用以下资源锁模式。  锁模式 描述  共享 (S) :读锁,用于不更改或不更新

    自动检测并解锁的程序

    原理: 利用ms sql server 的系统存储过程sp_who来列表整个系统进程,并通过blk字段来获得当前是否有进程互相等候,然后找到影响到整个源头的进程并调用kill来取消它。 整个系统非常简单。因为调用的系统存储过程...

    asp.net知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

    net学习笔记及其他代码应用

    28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    java 面试题 总结

    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、...

    Windows 系统错误代码简单分析

     0535 该管道的另一方有一进程。  0536 等候进程打开管道的另一端。  0994 拒绝对扩展属性的访问。  0995 由于线程退出或应用程序的要求, I/O 操作异常终止。  0996 重叠的 I/O 事件不处于已标记状态...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    JAVA上百实例源码以及开源项目源代码

    Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...

Global site tag (gtag.js) - Google Analytics