- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从死锁角度探究数据库性能优化
从死锁角度探究数据库性能优化摘要: 数据库的死锁问题在很大程度上影响着数据库的性能,死锁研究也是数据库性能优化的一个重要方面。本文以SQL Server数据库为例,从一个死锁实例入手,对死锁产生的原因进行深入剖析,然后分析死锁影响数据库性能的原因,最后文章给出了避免死锁的若干方法。
Abstract: The deadlock problem of database largely affects its performance. Deadlock research is an important aspect of database performance optimization. This paper starts from an instance of a deadlock based on SQL Server, searching for the causes of the deadlock in depth. And then analyze how deadlock affects database performance. Finally, the article shows several methods to avoid deadlock.
关键词: 死锁;数据库性能;优化
Key words: deadlock;database performance;optimization
中图分类号:TP392 文献标识码:A 文章编号:1006-4311(2012)03-0158-01
0 引言
数据库技术是计算机科学的重要分支,在当下web2.0时代,数据爆发式增长,人们在关注数据库功能的同时,对数据库性能提出越来越高的要求。数据库设计如果不合理,那么随着数据量的增加,系统负担将越来越重,甚至会造成系统无法正常使用等严重后果。
死锁的问题是数据库优化的一个重要方面。死锁产生时,多个不同事务在并发访问数据库资源过程中可能会产生冲突,冲突的事务处于等待状态,并且数据库引擎会回滚其中一个事务,这严重影响到数据库的性能。
1 死锁对数据库性能的影响
1.1 死锁演示 为了方便论述死锁产生的原因并对死锁的危害有直观认识,本文以微软SQL Server为例。首先在数据库中建立两张测试表,表名分别为userInfo和taskInfo,分别用来存储用户信息和任务信息。
在SQL Server Management Studio中打开两个查询窗口,模拟两个用户对数据库的访问,然后创建和运行事务tr1;创建和运行事务tr2。
单独运行事务tr1和tr2时,两个事务均用时10秒完成任务。下面先执行事务tr1,5秒钟之后执行事务tr2,这样在tr1还没有执行完毕之前tr2已经开始执行,如图1和图2;这个动作产生了死锁现象:事务tr1执行时间从10秒延长为20秒,而事务tr2则执行回滚操作,数据库引擎提示需要重新运行该事务。由此可见,死锁会大大影响数据库的性能。
1.2 产生死锁原因分析 下面我们详细分析一下产生死锁的原因,只有在找到正确原因之后,才能为避免死锁提供合理的解决方案。
1.2.1 事务tr1首先要更新userInfo表的内容,根据锁机制,tr1要像数据库引擎申请userInfo表的排他锁。
1.2.2 5秒钟后,事务tr2需要更新taskInfo表的数据,根据锁机制,tr2向数据库引擎请求taskInfo表的排他锁。因为请求锁的表不同,两个事务可以同时得到他们需要的排他锁。
1.2.3 在tr2完成对taskInfo表的更新操作之前,tr1完成了对userInfo表的更新操作,此时tr1又要更新taskInfo表,需要申请taskInfo表的排他锁,而此时tr2持有taskInfo表的排他锁,因此tr1只有等待tr2完成任务并且释放taskInfo表上的排他锁之后,才能或得taskInfo表的排他锁,对taskInfo表上的数据进行修改。
1.2.4 tr2执行完对taskInfo表的更新操作之后,又要修改userInfo表的内容,因此需要申请userInfo表的排他锁,而此时tr1持有userInfo表的排他锁,tr2必须等待tr1完成事务后才能申请到userInfo的排他锁进而对userInfo表进行修改。
这样,tr1和tr2分别持有userInfo和taskInfo表的排他锁,然后申请对方占用的锁。即双方都在等待对方释放资源,才能继续事务操作,从而就形成了相互等待的死锁现象。
1.3 死锁对数据库性能的影响 当数据库产生死锁时会严重影响数据库性能,原因包括如下两条:①数据库引擎检测到死锁需要一定的时间,在这段时间内相互阻塞的事务都处于等待状态
文档评论(0)