SQL Server 死锁案例分析 清疚 2022-04-06 09:47 324阅读 0赞 摘要: 概述 当应用程序频繁读写某个表或者资源时,很容易出现死锁现象。出现死锁时,SQL Server会选择终止其中一个事务,并且向发起该事务的客户端发送下面的错误信息。Error Message:Msg 1205, Level 13, State 47, Line 1Transaction (Process ID 53) was deadlocked on lock resources with an 概述 当应用程序频繁读写某个表或者资源时,很容易出现死锁现象。出现死锁时,SQL Server会选择终止其中一个事务,并且向发起该事务的客户端发送下面的错误信息。 Error Message: Msg 1205, Level 13, State 47, Line 1Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. 收集死锁信息 如果是ECS上自建的SQL Server实例,那么很幸运,有种便捷的方法,可以开启trace flag 1222,将死锁实时记录在错误日志中。 DBCC TRACEON(1222,-1) 对于RDS SQL Server死锁信息的采集方法,之前在RDS for SQL Server 死锁处理方法中有详细的描述,例如sys.sysprocesses和SQL Server Profiler,详细步骤在此就不赘述了。 死锁日志分析 一般来说,SQL Server Profiler和1222记录下来的死锁日志是比较全面的。SQL Server Profiler收集死锁日志,消耗性能较高,但是自动显示出死锁图谱,便于分析。 对于1222在错误日志中收集死锁信息,可以一直开启,只会在发生死锁是记录在日志中,对性能影响较小,不过分析稍微复杂些。错误日志的分析过程如下: 死锁发生的主要时间段是6月3号10:00至11:38, 10:00:06.16发生的死锁的进程,锁和资源信息如下: 进程process89a9a6748 在资源pageid=227126上面持有IX锁,此时process43c824748想要申请该page上的U锁,被阻塞。 同时process43c824748持有pageid=11768上持有U锁,此时process89a9a6748需要申请该页上的U锁,被阻塞。此时,两个进程互相阻塞,形成死锁。 死锁资源 资源1 资源2 资源类型 pagelock pagelock 具体内容 pageid=11768 dbid=37 pageid=227126 dbid=37 持有资源进程 process43c824748 process89a9a6748 等待资源进程 process89a9a6748 process43c824748 进程process89a9a6748执行语句 UPDATE C SET TaskTitle=T.TaskTitle FROM WF.C\*\*\*Task AS C INNER JOIN @complateTask AS T ON T.TaskID=C.TaskID EXEC WF.PROC\_UpdateTask\_Opin @INTRANSACTION,@processID,@isClearUnread,@task,@complateTask,@opin 进程process43c824748执行语句 UPDATE C SET TaskTitle=T.TaskTitle FROM WF.\*\*\*Task AS C INNER JOIN @complateTask AS T ON T.TaskID=C.TaskID EXEC WF.PROC\_\*\*Task\_Opin @INTRANSACTION,@processID,@isClearUnread,@task,@complateTask,@opin 解决意见 根据观察表结构和语句执行计划等信息,建议在表WF.CompletedTask的TaskID字段上面加一个非聚集索引,提升update执行速度,减少U锁的持有时间。
相关 Java并发编程:死锁案例分析 在Java并发编程中,死锁是一个常见的问题。简单来说,当两个或更多的线程相互等待对方释放资源时,就会发生死锁。 以下是一个简单的死锁案例: ```java // 定义两个线 谁借莪1个温暖的怀抱¢/ 2024年09月10日 21:48/ 0 赞/ 28 阅读
相关 死锁案例 死锁成因 了解了innodb锁的基本原理后,下面分析下死锁的成因。如前面所说,死锁一般是事务相互等待对方资源,最后形成环路造成的。下面简单讲下造成相互等待 r囧r小猫/ 2023年01月05日 04:00/ 0 赞/ 173 阅读
相关 死锁案例一 来源:公众号yangyidba 一、前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持 电玩女神/ 2022年11月29日 12:42/ 0 赞/ 164 阅读
相关 SQL Server 查看死锁的存储过程 if exists ( select \ from dbo.sysobjects where id = object\_id (N ' \[dbo 喜欢ヅ旅行/ 2022年06月17日 23:23/ 0 赞/ 129 阅读
相关 SQL SERVER性能分析--死锁检测数据库阻塞语句 工作中数据库经常出错死锁,并且还要要求解决当前的死锁,问题多多; 参照CSDN,中国风(Roy)一篇死锁文章并改进了下; /\\\\\\\\\\\\\\\\\\\\\\\\ 女爷i/ 2022年06月09日 12:37/ 0 赞/ 165 阅读
相关 通过SQL Server Profiler来监视分析死锁 原文: [https://www.cnblogs.com/wghao/archive/2010/01/17/1650120.html][https_www.cnblogs.co ゝ一世哀愁。/ 2022年05月28日 12:22/ 0 赞/ 169 阅读
相关 SQL Server 死锁案例分析 摘要: 概述 当应用程序频繁读写某个表或者资源时,很容易出现死锁现象。出现死锁时,SQL Server会选择终止其中一个事务,并且向发起该事务的客户端发送下面的错误信息。Err 清疚/ 2022年04月06日 09:47/ 0 赞/ 325 阅读
相关 SQL SERVER 查看近期死锁 SQL SERVER 查看近期死锁 在项目运行的过程中,死锁不可能完全避免,但要尽可能减少死锁的出现, 产生死锁的原因主要是: 1,系统资源不足。 2,进程运行推 以你之姓@/ 2022年02月13日 03:11/ 0 赞/ 204 阅读
相关 SQL Server解决死锁问题 用以下语句查询所有死锁的进程号和表名: SELECT request\_session\_id spid, OBJECT\_NAME( resource\_as ╰半橙微兮°/ 2021年11月04日 16:20/ 0 赞/ 284 阅读
还没有评论,来说两句吧...