欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【SQL Server 中死锁产生的原因及解决办法】,下面是详细的分享!
SQL Server 中死锁产生的原因及解决办法
其实所有的死锁最深层的原因就是一个:资源竞争。
表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A
这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了。
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.
表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....www.c hinaitpower.comlWOfnU
以上所分享的是关于SQL Server 中死锁产生的原因及解决办法,下面是编辑为你推荐的有价值的用户互动:
相关问题:产生进程死锁的原因是什么?如何接触死锁?
答:产生死锁的原因:一是系统提供的资源数量有限,不能满足每个进程的使用;二是多道程序运行时,进程推进顺序不合理。 产生死锁的必要条件是:1、互斥条件;2、不可剥夺条件(不可抢占);3、部分分配;4、循环等待。 根据产生死锁的四个必要条件... >>详细
相关问题:计算机系统中产生死锁的根本原因是什么?
答:计算机系统产生死锁的根本原因就是资源有限且操作不当。即: 1、系统提供的资源太少了,远不能满足并发进程对资源的需求。这种竞争资源引起的死锁是我们要讨论的核心。 例如:消息是一种临时性资源。某一时刻,进程A等待进程B发来的消息,进程B... >>详细
相关问题:什么是死锁?死锁产生的原因是什么
答:自锁,不是死锁。自锁是由于摩擦力的存在让本来可以实现转动的机械出现无论加再大力也无法转动的现象。它的原因是由于角度的原因,摩擦分力始终大于动力分力。 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
