摘要: 概述 当应用程序频繁读写某个表或者资源时,很容易出现死锁现象。出现死锁时,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锁的持有时间。
分享到:
相关推荐
在SQL Server数据库管理中,死锁是一...在提供的文件"sql server 死锁.wps"中,你可能会找到更具体的案例分析和解决方法,进一步加深对死锁的理解。记得定期检查和监控数据库的死锁情况,以便及时发现并处理潜在问题。
### SQL Server 死锁处理详解 #### 一、引言 在 SQL Server 数据库系统中,当两个或多个事务在等待对方释放资源时,就会发生死锁现象。死锁不仅会降低系统的整体性能,还可能导致数据处理异常中断,严重影响业务...
文档中的"SQL_Server死锁总结.docx"可能会提供具体的死锁案例分析,包括死锁的触发条件、诊断过程和解决措施。"下载说明.txt"可能是关于如何获取和使用这些资源的说明,而"A5下载- 更全的站长资源平台.url"则可能是...
3. **死锁案例分析** 在提供的案例中,可以看到两个事务在更新同一行数据时发生死锁。事务1(SPID 108)尝试更新`FinanceReceiptNoRule`表中`IsRunning='1' AND SeqCode='CGJS20160106'`的行,而事务2(SPID 161)...
在SQL Server的经典案例解析中,我们通常会遇到各种数据库管理和优化的问题。SQL Server作为一个广泛使用的关系型数据库管理系统,它的功能强大且应用场景广泛。本解析将深入探讨以下几个关键知识点: 1. **查询...
2. **锁和并发控制**:深入分析SQL Server的锁定机制,包括不同的锁定类型、死锁处理、事务隔离级别等内容。 3. **存储引擎**:解析SQL Server如何存储数据,涉及页结构、索引类型及其维护机制。 4. **查询优化器**...
在SQL Server 2000中,死锁是数据库管理系统中一种常见的问题,它发生在两个或...《SQL Server 2000 Deadlock Analysis》这份PDF文档很可能会提供详细的步骤、案例分析以及解决策略,帮助你更好地理解和应对死锁挑战。
《SQL Server 实用教程》是一本面向初学者和中级用户的指南,旨在帮助读者掌握SQL Server这一强大数据库管理系统...通过阅读和实践书中案例,你将能够有效地运用SQL Server解决实际工作中的问题,提升数据库管理能力。
《SQLServer2016数据库原理及应用》是一门深入探讨SQL Server 2016这一强大数据库管理系统的基础与高级特性的课程。本课程重点在于理解数据库的基本概念、设计原则以及在实际工作中的应用,同时涵盖了SQL Server ...
附带的源代码文件《Microsoft SQL Server 2008 T-SQL Fundamentals Codes.rar》提供了与书中示例相匹配的实践案例,读者可以通过亲手运行这些代码来加深理解。这不仅有助于巩固理论知识,也能提高实际操作能力。 ...
8. **事务和并发控制**:学习事务的ACID属性(原子性、一致性、隔离性和持久性),并了解SQL Server中的锁机制和死锁问题。 9. **安全性**:设置用户权限,理解角色和登录的概念,以及如何实现对数据库对象的访问...
提供实际场景案例分析和故障诊断实验 SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构独特,实例丰富,操作性强。 作者简介 作者:(美国)斯坦里克 (William R....
7. **事务与并发控制**:讲解事务的概念,ACID属性,以及SQL Server中的锁定机制和死锁处理。 8. **存储过程与触发器**:学习如何编写和使用存储过程和触发器,提高代码复用性和数据库逻辑的封装性。 9. **集成...
提供实际场景案例分析和故障诊断实验 SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构独特,实例丰富,操作性强。 作者简介 作者:(美国)斯坦里克 (William R....
本章详细介绍了 SQL Server 中不同类型的锁(如共享锁、排他锁等),并探讨了死锁问题及其解决方法。此外,还涉及了隔离级别的概念及其对事务一致性的影响。 #### 闩锁与自旋锁 (Chapter 7) 闩锁和自旋锁是在 SQL ...
改进的行版本控制(Row Versioning)和快照隔离级别,使得SQL Server 2005能更好地处理高并发场景,避免了死锁等问题,提升了多用户环境下应用的性能。 在这个案例中,“财务凭证管理系统”很可能是利用SQL Server...
提供实际场景案例分析和故障诊断实验 SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构独特,实例丰富,操作性强。 作者简介 作者:(美国)斯坦里克 (William R....