首页 > 数据库死锁语句脚本

数据库死锁语句脚本

一 :  查看死锁以及数据表阻塞信息

 1 CREATE procedure sp_who_lock 
 2 as 
 3 begin 
 4 declare @spid int 
 5 declare @blk int 
 6 declare @count int 
 7 declare @index int 
 8 declare @lock tinyint 
 9 set @lock=0 
10 create table #temp_who_lock 
11 ( 
12 id int identity(1,1), 
13 spid int, 
14 blk int 
15 ) 
16 if @@error<>0 return @@error 
17 insert into #temp_who_lock(spid,blk) 
18 select 0 ,blocked 
19 from (select * from master..sysprocesses where blocked>0)a 
20 where not exists(select * from master..sysprocesses where a.blocked =spid and blocked>0) 
21 union select spid,blocked from master..sysprocesses where blocked>0 
22 if @@error<>0 return @@error 
23 select @count=count(*),@index=1 from #temp_who_lock 
24 if @@error<>0 return @@error 
25 if @count=0 
26 begin 
27 select '没有阻塞和死锁信息' 
28 return 0 
29 end 
30 while @index<=@count 
31 begin 
32 if exists(select 1 from #temp_who_lock a where id>@index and exists(select 1 from #temp_who_lock where id<=@index and a.blk=spid)) 
33 begin 
34 set @lock=1 
35 select @spid=spid,@blk=blk from #temp_who_lock where id=@index 
36 select '引起数据库死锁的是: '+ CAST(@spid AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' 
37 select @spid, @blk 
38 dbcc inputbuffer(@spid) 
39 dbcc inputbuffer(@blk) 
40 end 
41 set @index=@index+1 
42 end 
43 if @lock=0 
44 begin 
45 set @index=1 
46 while @index<=@count 
47 begin 
48 select @spid=spid,@blk=blk from #temp_who_lock where id=@index 
49 if @spid=0 
50 select '引起阻塞的是:'+cast(@blk as varchar(10))+ '进程号,其执行的SQL语法如下' 
51 else 
52 select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '' + '进程号SPID:'+ CAST(@blk AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下' 
53 dbcc inputbuffer(@spid) 
54 dbcc inputbuffer(@blk) 
55 set @index=@index+1 
56 end 
57 end 
58 drop table #temp_who_lock 
59 return 0 
60 end
View Code

二 : 查看库内所有在WAIT状态的锁

 1 SELECT  L1.resource_type ,
 2         DB_NAME(L1.resource_database_id) AS DatabaseName ,
 3         CASE L1.resource_type
 4           WHEN 'OBJECT'
 5           THEN OBJECT_NAME(L1.resource_associated_entity_id,
 6                            L1.resource_database_id)
 7           WHEN 'DATABASE' THEN 'DATABASE'
 8           ELSE CASE WHEN L1.resource_database_id = DB_ID()
 9                     THEN ( SELECT   OBJECT_NAME(object_id,
10                                                 L1.resource_database_id)
11                            FROM     sys.partitions
12                            WHERE    hobt_id = L1.resource_associated_entity_id
13                          )
14                     ELSE NULL
15                END
16         END AS ObjectName ,
17         L1.resource_description ,
18         L1.request_session_id ,
19         L1.request_mode ,
20         L1.request_status
21 FROM    sys.dm_tran_locks AS L1
22         JOIN sys.dm_tran_locks AS L2 ON L1.resource_associated_entity_id = L2.resource_associated_entity_id
23 WHERE   L1.request_status <> L2.request_status
24         AND ( L1.resource_description = L2.resource_description
25               OR ( L1.resource_description IS NULL
26                    AND L2.resource_description IS NULL
27                  )
28             )
29 ORDER BY L1.resource_database_id ,
30         L1.resource_associated_entity_id ,
31         L1.request_status ASC;
View Code

三 : 查看阻塞持续时间超过5000ms的会话

1 SELECT  W.session_id AS waiting_session_id , 
2         W.waiting_task_address , 
3         W.wait_duration_ms , 
4         W.wait_type , 
5         W.blocking_session_id , 
6         W.resource_description 
7 FROM    sys.dm_os_waiting_tasks AS W 
8 WHERE   W.wait_duration_ms > 5000 
9         AND blocking_session_id IS NOT NULL;
View Code

四 : 查看Lock类型为X,S,U的锁

 1 SELECT  request_session_id , 
 2         resource_type , 
 3         DB_NAME(resource_database_id) AS DatabaseName , 
 4         OBJECT_NAME(resource_associated_entity_id) AS TableName , 
 5         request_mode , 
 6         request_type , 
 7         request_status 
 8 FROM    sys.dm_tran_locks AS L 
 9         JOIN sys.all_objects AS A ON L.resource_associated_entity_id = A.object_id 
10 WHERE   request_type = 'LOCK' 
11         AND request_status = 'GRANT' 
12         AND request_mode IN ( 'X', 'S' ) 
13         AND A.type = 'U' 
14         AND resource_type = 'OBJECT' 
15         AND L.resource_database_id = DB_ID();
View Code

五 : 监听数据库异常信息 当数据异常时,会抛出异常信息,在消息中.

DBCC TRACEON(1222,-1)

转载于:https://www.cnblogs.com/DeepLearing/p/4060433.html

更多相关:

  •     先吐为敬!   最近心血来潮研究nodejs如何完成微信支付功能,结果网上一搜索,一大堆“代码拷贝党”、“留一手”、“缺斤少两”、“不说人话”、“自己都没跑通还出来发blog”、“各种缺少依赖包”、“各种注释都没有”、“自己都不知道在写什么”的程序大神纷纷为了增加自己博客一个帖子的名额而发布了各种千奇百�...

  • 阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件: 函数名称:syscall(SYS_gettid) 该函数直接返回了一个pid_t int类型的数字,即为当前线程id 此外函数pthread_s...

  • 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 基于数据库的实现方案 数据库自增 id 这个就是说你的...

  • ORM操作    单表、一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models.CharField(max_length=32) 6 7 8 class UserInfo(m...

  • 建立如下表: 建表语句: class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engine=innodb default charset=utf8;student表创建语句 c...

  • select {appearance: none;/*隐藏原生select下拉框的向下箭头▼*/ }...

  • 一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssq...

  • 一、介绍   GreenPlum分布式数据仓库,大规模并行计算技术。  无共享/MPP核心架构  Greenplum数据库软件将数据平均分布到系统的所有节点服务器上,所以节点存储每张表或表分区的部分行,所有数据加载和查询都是自动在各个节点服务器上并行运行,并且该架构支持扩展到上万个节点。 混合的存储和执行(按列或按行)  Greenp...

  • from selenium.webdriver.support.ui import Select Select(d.find_element_by_id(u'key_开户行')).first_selected_option.text 转载于:https://www.cnblogs.com/paisen/p/3669272.html...

  • 我们都知道面试的时候通常都会考数据库部分的知识,所以在此整理了下我们常用的面试中常用的一些查询语句SQL,本人测试数据库为SQL Server2008 首先在数据库中建立一个测试库,此处用DavidTest代替 数据表与相应测试数据 USE [DavidTest] GO /****** Object: Table [dbo].[T...