分析死锁的方法

常看到死锁的问题,一般都是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 输出了错误信息,请与系统管理员联系。
*/

时间: 2024-09-17 04:19:44

分析死锁的方法的相关文章

分析Java虚拟机死锁的方法

到目前为止,我认为分析Java代码问题的最有效的工具仍然是java thread dump,原因是: 1.任何操作系统平台下都可以使用. 2.在多数情况下,可以在生产环境中使用. 3.和操作系统提供的工具相比,java thread dump给出的信息是直白的,直接对应到应用代码. 4.它对被分析的系统干扰很小,因此能反应真实的问题.而其它很多profiling或Instrument工具本身对JVM运行有很大的干扰,经常不能暴露出真正的问题,而且这种工具不能用于生产系统. 我觉得在通常情况下分析

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

MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1.MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 2.各种锁特点 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁:开销大,加锁慢;

在Linux上,你做死锁分析的简单方法

简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程). 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁. 一种交叉持锁死锁的情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每个线程都在等待被其

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

MySQL死锁问题的相关知识是本文我们主要要介绍的内容,接下来我们就来一一介绍这部分内容,希望能够对您有所帮助. 1.MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 2.各种锁特点 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁

ASP漏洞分析和解决方法

解决 ASP漏洞分析和解决方法 有人说一台不和外面联系的电脑是最安全的电脑,一个关闭所有端口,不提供任何服务的电脑也是最安全的.黑客经常利用我 们所开放的端口实施攻击,这些攻击最常见的是DDOS(拒绝服务攻击).下面我会列出ASP的二十几个漏洞,每个漏洞都会有漏洞描 述和解决方法. 1 在ASP程序后加个特殊符号,能看到ASP源程序 受影响的版本: win95+pws IIS3.0 98+pws4 不存在这个漏洞. IIS4.0以上的版本也不存在这个漏洞. 问题描述: 这些特殊符号包括小数点,%

Excel表格中使用单变量求解分析数据的方法

  Excel表格中使用单变量求解分析数据的方法           1.打开工作簿,创建工作表,并在工作表中输入数据,同时在B10单元格中输入公式"=SUM(B3:B9)"计算费用总和,如图1所示. 图1 创建工作表 2.在"数据"选项卡的"数据工具"组中单击"模拟分析"按钮,在打开的下拉列表中选择"单变量求解"选项,如图2所示. 图2 选择"单变量求解"选项 3.打开"单变

web上存漏洞及原理分析、防范方法(文件名检测漏洞)

我们通过前篇:<web上存漏洞及原理分析.防范方法(安全文件上存方法) >,已经知道后端获取服务器变量,很多来自客户端传入的.跟普通的get,post没有什么不同.下面我们看看,常见出现漏洞代码.1.检测文件类型,并且用用户上存文件名保存 复制代码 代码如下: if(isset($_FILES['img'])) { $file = save_file($_FILES['img']); if($file===false) exit('上存失败!'); echo "上存成功!"

python使用htmllib分析网页内容的方法

  这篇文章主要介绍了python使用htmllib分析网页内容的方法,涉及Python使用htmllib模块的相关技巧,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 import htmllib, urllib, formatter, sys website = urllib.urlopen("http://yourweb.com") data = website.read() website.close() format = formatter.AbstractForm

PHP程序漏洞产生的原因分析与防范方法说明

 本篇文章主要是对PHP程序漏洞产生的原因分析与防范方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 滥用include    1.漏洞原因:    Include是编写PHP网站中最常用的函数,并且支持相对路径.有很多PHP脚本直接把某输入变量作为Include的参数,造成任意引用脚本.绝对路径泄露等漏洞.看以下代码:    ...  $includepage=$_GET["includepage"];  include($includepage);  ...