SET QUOTED_IDENTIFIER ON<wbr></wbr>
GO
SET ANSI_NULLS ON<wbr></wbr>
GO
-- exec proc p_lockinfo 0, 0
ALTER <wbr>proc p_lockinfo</wbr>
@kill_lock_spid bit=1, <wbr>--是否杀掉死锁的进程,1 杀掉, 0
仅显示</wbr>
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0
不显示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),标志,
<wbr>进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,</wbr>
<wbr>数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,</wbr>
<wbr>登陆时间=login_time,打开事务数=open_tran,
进程状态=status,</wbr>
<wbr>工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,</wbr>
<wbr>域名=nt_domain,网卡地址=net_address</wbr>
into #t from(
<wbr>select 标志='死锁的进程',</wbr>
<wbr>
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,</wbr>
<wbr>
status,hostname,program_name,hostprocess,nt_domain,net_address,</wbr>
<wbr> s1=a.spid,s2=0</wbr>
<wbr>from master..sysprocesses a join (</wbr>
<wbr> select blocked from master..sysprocesses
group by blocked</wbr>
<wbr> )b on a.spid=b.blocked where
a.blocked=0</wbr>
<wbr>union all</wbr>
<wbr>select '|_牺牲品_>',</wbr>
<wbr>
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,</wbr>
<wbr>
status,hostname,program_name,hostprocess,nt_domain,net_address,</wbr>
<wbr> s1=blocked,s2=1</wbr>
<wbr>from master..sysprocesses a where
blocked<>0</wbr>
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
<wbr>insert #t</wbr>
<wbr>select 标志='正常的进程',</wbr>
<wbr>
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,</wbr>
<wbr>
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address</wbr>
<wbr>from master..sysprocesses</wbr>
<wbr>set @count=@@rowcount</wbr>
end
if @count>0
begin
<wbr>create table #t1(id int identity(1,1),a
nvarchar(30),b Int,EventInfo nvarchar(255))</wbr>
<wbr>if @kill_lock_spid=1</wbr>
<wbr>begin</wbr>
<wbr> declare @spid varchar(10),@标志
varchar(10)</wbr>
<wbr> while @i<=@count</wbr>
<wbr> begin</wbr>
<wbr><wbr>select @spid=进程ID,@标志=标志
from #t where id=@i</wbr></wbr>
<wbr><wbr>insert #t1 exec('dbcc
inputbuffer('+@spid+')')</wbr></wbr>
<wbr><wbr>if @标志='死锁的进程' exec('kill
'+@spid)</wbr></wbr>
<wbr><wbr>set @i=@i+1</wbr></wbr>
<wbr> end</wbr>
<wbr>end</wbr>
<wbr>else</wbr>
<wbr> while @i<=@count</wbr>
<wbr> begin</wbr>
<wbr><wbr>select @s='dbcc
inputbuffer('+cast(进程ID as varchar)+')' from #t where id=@i</wbr></wbr>
<wbr><wbr>insert #t1 exec(@s)</wbr></wbr>
<wbr><wbr>set @i=@i+1</wbr></wbr>
<wbr> end</wbr>
<wbr>select a.*,进程的SQL语句=b.EventInfo</wbr>
<wbr>from #t a join #t1 b on a.id=b.id</wbr>
end
GO
SET QUOTED_IDENTIFIER OFF<wbr></wbr>
GO
SET ANSI_NULLS ON<wbr></wbr>
GO
相关推荐
创建SP_WHO_LOCK死锁信息临时表,查询数据库死锁信息,方便解决数据库锁库问题。
用C语言实现死锁检测
本文分享一个查看死锁的存储过程,方便技术人员查找产生死锁的原因。
操作系统的死锁检测算法, VC++调试通过
exec p_lockinfo 0,1 --*/ create proc p_lockinfo @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示 @show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。SQL Server自带的系统存储过程sp_who和sp_lock也可以用来查找阻塞和死锁, 但没有这里介绍的方法好用
两种存储过程检查死锁sp_who_ock
使用QSemaphore,QWaitCondition处理生产者消费者问题死锁模拟
oracle死锁及连接数监测
此脚本简单,实用,可以查询数据库死锁,以及引起死锁的进程 ,阻塞sql进程等等
车辆行驶死锁问题,在Linux下用C语言完成下面模型:设有一个T型路口,其中A,B,C,D各处可容纳一辆车,车型方向如图所示。找出死锁并用有序分配法消除之,要求资源编号合理。
操作系统中广泛应用的用于避免死锁的银行家算法的程序实现
oracle后台查看死锁语句,也可以通过plsql的工具---会话--点击lock_wait列过滤出死锁的语句。
邹建 2004.4 代码如下: /*–调用示例 exec p_lockinfo1 –*/ alter proc p_lockinfo1 @kill_lock_spid bit=1, –是否杀掉死锁的进程,1 杀掉, 0 仅显示 @show_spid_if_nolock bit=1 –如果没有死锁的进程,是否显示...
操作系统课程设计--死锁检测算法,这个程序自动显示死锁检测过程
没有索引或者没有用到索引、I/O吞吐量小,形成了瓶颈效应、内存不足、网络速度慢、查询出的数据量过大、锁或者死锁、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源、返回了不必要的行和列、查询语句不好,没有...
此代码运行后,会生成一个存储过程,后面直接调用此存储过程即可查看,运行非常方便,可以快速定位死锁进程,快速解决sql数据库死锁问题。希望可以给各位系统管理员带来方便。希望可以给各位系统管理员带来方便。...
Java死锁_动力节点Java学院整理,动力节点Java学院整理
通过Windows的WCT API来查看系统中的进程是否存在死锁