[SQL]死锁处理语句

引言

今天在群里看到分享的解决死锁的sql语句,就想着这东西以后肯定用的着,就下载下来,在这里记录一下,以后查找也方便。

SQL

 1 SET QUOTED_IDENTIFIER ON
 2 GO
 3 SET ANSI_NULLS ON
 4 GO
 5 CREATE PROCEDURE sp_who_lock
 6 AS
 7     BEGIN
 8         DECLARE @spid INT ,
 9             @bl INT ,
10             @intTransactionCountOnEntry INT ,
11             @intRowcount INT ,
12             @intCountProperties INT ,
13             @intCounter INT
14         CREATE TABLE #tmp_lock_who
15             (
16               id INT IDENTITY(1, 1) ,
17               spid SMALLINT ,
18               bl SMALLINT
19             )
20          IF @@ERROR <> 0
21             RETURN @@ERROR
22         INSERT INTO #tmp_lock_who ( spid, bl )
23                 SELECT 0, blocked
24                     FROM ( SELECT *
25                             FROM sys.sysprocesses
26                             WHERE blocked > 0
27                          ) a
28                     WHERE NOT EXISTS ( SELECT *
29                                         FROM ( SELECT *
30                                                 FROM sys.sysprocesses
31                                                 WHERE blocked > 0
32                                              ) b
33                                         WHERE a.blocked = spid )
34                 UNION
35                 SELECT spid, blocked
36                     FROM sys.sysprocesses
37                     WHERE blocked > 0
38         IF @@ERROR <> 0
39             RETURN @@ERROR
40        -- 找到临时表的记录数
41         SELECT @intCountProperties = COUNT(*), @intCounter = 1
42             FROM #tmp_lock_who
43          IF @@ERROR <> 0
44             RETURN @@ERROR
45         IF @intCountProperties = 0
46             SELECT N'现在没有阻塞和死锁信息' AS message
47        -- 循环开始
48         WHILE @intCounter <= @intCountProperties
49             BEGIN
50               -- 取第一条记录
51                 SELECT @spid = spid, @bl = bl
52                     FROM #tmp_lock_who
53                     WHERE Id = @intCounter
54                 BEGIN
55                     IF @spid = 0
56                         SELECT N'引起数据库死锁的是: ' + CAST(@bl AS VARCHAR(10))
57                                 + N'进程号,其执行的SQL语法如下'
58                     ELSE
59                         SELECT N'进程号SPID:' + CAST(@spid AS VARCHAR(10))
60                                 + N'被进程号SPID:' + CAST(@bl AS VARCHAR(10)) N'阻塞,其当前进程执行的SQL语法如下'
61                     DBCC INPUTBUFFER (@bl )
62                 END
63               -- 循环指针下移
64                 SET @intCounter = @intCounter + 1
65             END
66         DROP TABLE #tmp_lock_who
67         RETURN 0
68     END
69 go
70 EXEC sp_who_lock
71 DROP PROC  sp_who_lock
72 GO
73 SET QUOTED_IDENTIFIER OFF
74 GO
75
76 SET ANSI_NULLS ON
77
78 GO

 

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3879050.html

时间: 2024-09-23 02:50:48

[SQL]死锁处理语句的相关文章

SQL Server数据库管理常用的SQL和T-SQL语句

server|数据|数据库|语句 SQL Server 数据库管理常用的SQL和T-SQL语句  1. 查看数据库的版本 select @@version 2. 查看数据库所在机器操作系统参数 exec master..xp_msver 3. 查看数据库启动的参数 sp_configure 4. 查看数据库启动时间 select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1 查看数据库服务器名

[翻译]:SQL死锁-锁的类型

原文:[翻译]:SQL死锁-锁的类型     很久没有写博客了,这里面的原因有很多.最近的一个项目由于客户明确提出要做下性能压力测试,使用的工具就是VS自带的压力测试工具.以前其它项目做压力测试后反馈的其中一个重要问题就是数据库的死锁.没想到我们这个项目测试时死锁同样的发生了,我之前的项目由于很少参与压力测试,基本上也不会去了解死锁,以及死锁如何解决的问题.     既然有了这个需求,那么要想解决死锁就需要对死锁的相关知识有一定的了解,对于非DBA的来讲并不需要了解的特别深,知道基本概念以及常见

[翻译]:SQL死锁-阻塞探测

原文:[翻译]:SQL死锁-阻塞探测 到了这篇,才是真正动手解决问题的时候,有了死锁之后就要分析死锁的原因,具体就是需要定位到具体的SQL语句上.那么如何发现产生死锁的问题本质呢?下面这篇讲的非常细了,还提到了不少实用的SQL,但对我个人来讲,前半部分基本就够用,可以指出死锁的原因,至于后面那些有兴趣可以多研究研究. As we already know, usually blocking happens due non-optimized queries. But how to detect

[翻译]:SQL死锁-死锁排除

原文:[翻译]:SQL死锁-死锁排除 As we already saw, the reasons why we have blocking issues and deadlocks in the system are pretty much the same. They occur because of non-optimized queries. So, not surprisingly, troubleshooting techniques are very similar. Let's

[翻译]:SQL死锁-锁与事务级别

原文:[翻译]:SQL死锁-锁与事务级别 其实这一篇呢与解决我项目中遇到的问题也是必不可少的.上一篇讲到了各种锁之间的兼容性,里面有一项就是共享锁会引起死锁,如何避免呢,将我们的查询都设置中read uncommitted是否可行呢?其结果显示,当我们当所有的查询都设置成read uncommitted后,后面共享锁死锁基本消除了,看来还是管用的.好了下面接着翻译: Last time we discussed a few major lock types that SQL Server use

[翻译]:SQL死锁-阻塞

原文:[翻译]:SQL死锁-阻塞 一般情况下死锁不是一步到位的,它必须满足特定的条件,然后形成资源的循环依赖才会产生死锁,死锁之前一定会出现阻塞,由阻塞升级才有可能出现死锁,所以我们有必要了解系统中都有哪些已经被阻塞的锁. 我在解决共享锁产生的死锁时,我测试团队的一位同事的问题:既然所有的查询都已经是read uncommitted模式了,为什么还会有死锁呢?下面这篇会回答这个问题. We already know what are the most important lock types a

[翻译]:SQL死锁-为什么会出现死锁

原文:[翻译]:SQL死锁-为什么会出现死锁 下面这篇对理解死锁非常重要,首先死锁是如何产生的我们要清楚. We already know why blocking occurs in the system and howto detect and troubleshoot the blocking issues. Today I'd like us to focus on the deadlocks.First, what is the deadlock? Classic deadlock o

SqlServer查询和Kill进程死锁的语句_MsSql

查询死锁进程语句 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 杀死死锁进程语句 kill spid 下面再给大家分享一段关于sqlserver检测死锁;杀死锁和进程;查看锁信息 --检测死锁 --如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?

SqlServer查询和Kill进程死锁的语句

查询死锁进程语句 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 杀死死锁进程语句 kill spid 下面再给大家分享一段关于sqlserver检测死锁;杀死锁和进程;查看锁信息 --检测死锁 --如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?