zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

[SQL]死锁处理语句

SQL 处理 语句 死锁
2023-09-14 09:01:01 时间

今天在群里看到分享的解决死锁的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

16 id INT IDENTITY(1, 1) ,

17 spid SMALLINT ,

18 bl SMALLINT

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

76 SET ANSI_NULLS ON

78 GO
复制代码

 


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

转载:http://www.cnblogs.com/wolf-sun/p/3879050.html
一个线上SQL死锁异常分析:深入了解事务和锁 引发死锁的原因是什么?如何避免?本文详细介绍了和死锁有关的知识点,通过深入分析MySQL事务和锁的机制,结合案例背景,找到了问题的所在,并梳理了解决方案,详解其原理。希望对同学们有所启发。
SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试 SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试最近在分析SQL Server的死锁时,发现一个比较有意思的现象,发现死锁当中一个会话的隔离级别为序列化(Serializable),这个是让人比较奇怪的地方,我们知道SQL Server数据库的默认隔离级别为已提交读(READ COMMITTED),除非人为设置事务隔离级别(TRANSACTION ISOLATION LEVEL),否则事务隔离级别会使用数据库的默认隔离级别。
SQL SERVER 查看近期死锁 SQL SERVER 查看近期死锁在项目运行的过程中,死锁不可能完全避免,但要尽可能减少死锁的出现, 产生死锁的原因主要是: 1,系统资源不足。 2,进程运行推进的顺序不合适。 3,资源分配不当等。 产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某资源仅为一个进程所占有。
SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁 原文:SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象。
SQL Server死锁 原文:SQL Server死锁 SQL Server死锁 多个事务之间互相等待对方的资源,导致这些事务永久等待 注意是永久等待,而非长事务 死锁的4个条件 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
SQL Server 死锁的告警监控 原文:SQL Server 死锁的告警监控 今天这篇文章总结一下如何监控SQL Server的死锁,其实以前写过MS SQL 监控错误日志的告警信息,这篇文章着重介绍如何监控数据库的死锁,当然这篇文章不分析死锁产生的原因、以及如何解决死锁。
在日常运维阿里云RDS SQL Server产品过程中,经常会被客户问道:“应用程序被死锁报错啦?影响很大,到底是哪个进程导致了死锁发生的啊?怎么解决啊?怎么办呀?”。
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载