日期:2014-05-18  浏览次数:20589 次

令人无法理解的死锁案例分析

最近遇到一个诡异的Deadlock:

http://www.cnblogs.com/nzperfect/archive/2011/09/26/2192006.html

------解决方案--------------------
好多米~~~~~
------解决方案--------------------

------解决方案--------------------
感觉博客园的资源比CSDN丰富
------解决方案--------------------
好多米~~~~~
------解决方案--------------------
先占楼
------解决方案--------------------
请教楼主,为何添加了一个貌似无关的非聚集索引 create index ix_b_cd on tt(b)include(c,d)
之后, update事务的锁的过程不一致了.
------解决方案--------------------
大叔研究得深哦.
------解决方案--------------------
路过来学习一下!
大叔的这个问题比较有难度!
------解决方案--------------------
探讨
通过上图,可以看到在得到聚集键520072b6acb1并为之加U/X锁之后,居然释放掉了非聚集索引键2b02a7cba37c上的U锁,释放之后又再一次的重新获取2b02a7cba37c上的X锁,试想如果在它释放2b02a7cba37cU锁到重新获取x锁这个时间差之间,其它update该行的进程插进来取得2b02a7cba37c上的U锁,将会怎么样?

------解决方案--------------------
先占楼
------解决方案--------------------
不懂得飘过、、、
------解决方案--------------------
see....
------解决方案--------------------
mark
------解决方案--------------------
高深,学习中
------解决方案--------------------
占位学习
------解决方案--------------------
呵呵呵,还真没接触过这么高深的东西,想看懂都费力啊。
------解决方案--------------------
不懂,了解
------解决方案--------------------
大叔的这个问题比较有难度
------解决方案--------------------
数据库我研究不多。我服务器用数据库只敢用一个thread一个db conn连.不敢多连接db.怕同时并发要么把程序这边弄复杂甚至出bug.要么把db服务器弄崩。
------解决方案--------------------

------解决方案--------------------
珍しいです
------解决方案--------------------
我通常是先用Select把聚焦索引键值取出到临时表里,再根据聚集索引进行UPDATE,来避免死锁的发生
------解决方案--------------------
学习一下,谢谢观赏
------解决方案--------------------
我也想不通,建议翻译成英文,到SQL Server storage engine team 的blog上找篇文章回复一下,会有人回复你的。

http://blogs.msdn.com/b/sqlserverstorageengine//
------解决方案--------------------
先占位.
------解决方案--------------------

------解决方案--------------------
学习了
------解决方案--------------------

------解决方案--------------------
还真是没见过这问题啊 学习了
------解决方案--------------------
不要着急,慢慢理解
------解决方案--------------------