`

分析死锁的方法

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

常看到死锁的问题,一般都是KILL进程,但如果不查出引起死锁的原因,死锁会时常发生
可以通过查找引起死锁的的操作,就可以方便的解决死锁,现将日常解决问题的方法总结,也许对大家有帮助

1/死锁发生时,通过如下语法,查询出引起死锁的操作

use master
go
declare @spid int,@bl int
DECLARE s_cur CURSOR FOR
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
OPEN s_cur
FETCH NEXT FROM s_cur INTO @spid,@bl
WHILE @@FETCH_STATUS = 0
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)
FETCH NEXT FROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur

exec sp_who2
2/查找程序/数据库,此t_sql语法在什么地方使用
3/分析找到的,并解决问题

EG:

/*
-------------------------------------------------------
引起数据库死锁的是: 71进程号,其执行的SQL语法如下

EventType Parameters EventInfo
-------------- ---------- ------------------------------------------------
Language Event 0
select * from test
insert test values(1,2)


(所影响的行数为 1 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

------------------------------------------------------------------------------
进程号SPID:64被进程号SPID:71阻塞,其当前进程执行的SQL语法如下

EventType Parameters EventInfo
-------------- ---------- ------------------------------------------------
Language Event 0
select * from test
insert test values(1,2)


(所影响的行数为 1 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

------------------------------------------------------------------------------
进程号SPID:65被进程号SPID:64阻塞,其当前进程执行的SQL语法如下

EventType Parameters EventInfo
-------------- ---------- --------------------------------------------------------------------------------------------------
Language Event 0 begin tran
select * from test with (holdlock)
waitfor time '12:00'
select * from test
commit

(所影响的行数为 1 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

------------------------------------------------------------------------------
进程号SPID:73被进程号SPID:64阻塞,其当前进程执行的SQL语法如下

EventType Parameters EventInfo
-------------- ---------- --------------------------------------------------------------------------------------------------
Language Event 0 begin tran
select * from test with (holdlock)
waitfor time '12:00'
select * from test
commit

(所影响的行数为 1 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/




分享到:
评论

相关推荐

    论文研究 - 基于参与者模型的死锁分析理论的通信死锁分析的实现

    我们提出了一种针对参与者模型的通信死锁分析的独特方法,该方法的分析结果偏低。 我们的分析通过在称为从属依赖关系图的新型依赖关系图中找到循环依赖关系来检测狭窄定义的通信死锁。 从属依赖关系图基于Actor之间...

    操作系统实验六 死锁问题实验

    通过本实验观察死锁产生的现象,考虑解决死锁问题的方法。从而进一步加深对于死锁问题的理解。掌握解决死锁问题的几种算法的编程和调试技术。练习怎样构造管程和条件变量,利用管程机制来避免死锁和饥俄问题的发生。

    oracle死锁故障分析和诊断解决

    oracle死锁故障分析和诊断解决~~~~~~~~~

    db2死锁问题分析及解决方案

    db2死锁问题分析及解决方案,可以快速解决数据库问题。

    python避免死锁方法实例分析

    主要介绍了python避免死锁方法,较为详细的分析了死锁的成因与避免形成死锁的方法,需要的朋友可以参考下

    死锁与段错误解读分析

    分析了linux程序员常遇到的死锁和段错误问题,从出现的原因到调试方法进行详细介绍。

    该如何解决MySQL中的死锁问题.txt

    解决MySQL中的死锁问题通常涉及多个方面,包括监控死锁、分析死锁原因、优化事务设计以及调整系统配置等。以下是一些解决MySQL中死锁问题的建议和方法: 监控死锁: 使用SHOW ENGINE INNODB STATUS命令来查看InnoDB...

    分析+Oracle+死锁的检测查询及处理方法

    分析+Oracle+死锁的检测查询及处理方法

    java Thread Dump Lockness检查死锁

    这个对于定位死锁很重要,很简单。在运行java控制台的时候,都会用 java -classpath XXX org.XXX. main 这种方法 在管理控制台中按下ctrl + break 就能从界面上获得及时的堆栈信息了,但是这些信息很不方便。那么又...

    操作系统银行家算法避免死锁

    银行家算法避免死锁 VM软件 Linux系统 C语言 成功编译 成功...(4)另选择一种死锁避免的方法进行实现,完成整个过程。如哲学家就餐、生产者-消费者或者读者-写者问题等。 (5)要求在linux ubuntu环境下使用c/c++编写

    论文研究-一类Petri网的死锁预防方法 .pdf

    一类Petri网的死锁预防方法,钟春富,李志武,信标在Petri网的死锁分析和控制中占重要地位。其计算通常要耗费大量时间,有时甚至不能求解所有信标。基于MIP,利用迭代法针对Petri��

    数据库 死锁的解决

    仔细分析你程序的逻辑, 1:尽量避免同时锁定两个资源 2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源. 表现二: 用户A读一条纪录,然后修改该条纪录 这是用户B修改该条纪录 ...

    4-死锁1

    2. 死锁特征分析—产生死锁的四个必要条件 3. 死锁处理方法 2. 死锁特征分析—产生死锁的四个必要条件 3. 死锁处理方法 2. 死锁特征分析—产生死锁的四

    关于I2C总线死锁恢复的研究.pdf

    :介绍了I2C总线的基本原理,详细分析了I2C总线死锁现象产生的原因,提出了总线死锁恢复的各 种解决方法。并就每一种方法进行了仔细的研究,比较了各种方法的优点以及局限性,对I2C总线可用性设计提 出了指导。

    MySQL死锁问题分析及解决方法实例详解

    MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级...

    MySQL死锁的产生原因以及解决方案

    在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁...

    板材FMS基于RBOPN模型的死锁分析 (2007年)

    基于板材柔性制造系统模型RBOPN所具有的可以完全描述FMS的动态行为以及系统中相关对象子网之间关系的分析能力,提出一种死锁检查分析方法。通过以抽象对象封装系统中各物理对象的所有相关对象的内部行为,研究抽象...

    如何通过编程发现Java死锁

    尽管出现了一些静态分析库可以帮助我们发现可能出现的死锁,我们还是有必要在运行时检测到死锁,并且得到有用的信息,以便我们解决这个问题或者重启程序,或者做些其他的事情。  在编程中使用ThreadMXBean类来检测...

Global site tag (gtag.js) - Google Analytics