数据库遇到死锁了,大家是怎样解决的?

2014 年 8 月 9 日
 cloudhunter
数据库是SQL Server 2008,前一阵出现很多并发写操作,然后日志就报死锁异常了。遇到死锁的时候要一般要怎样处理?用ActiveMQ之类的任务队列把并发操作变成串行,还是死锁之后重试?
2347 次点击
所在节点    数据库
8 条回复
canesten
2014 年 8 月 9 日
先查日志
分析一下怎么锁的
CosWind
2014 年 8 月 9 日
高级别事务或者乐观锁配合稍低级别事务
ybh37
2014 年 8 月 9 日
先分析死锁原因吧。
尽量不用Update
频繁的修改操作尽量用insert替代。
如果是通信丢包造成的死锁,尽快更换网络设备。
cloudhunter
2014 年 8 月 9 日
@canesten 谢谢,我们一开始没想到会出现死锁问题,然后数据库好像就没开启任何这方面的日志记录
cloudhunter
2014 年 8 月 9 日
@CosWind 谢谢你我Google研究下你说的东西
cloudhunter
2014 年 8 月 9 日
@ybh37 所有的操作都是delete / insert,没有update。通信丢包也能造成死锁的吗?其实我们的程序之前一直运行的好好的,就是前一阵突然出现大量死锁才引起注意。可能就是你说的原因。请问你之前是遇到通信丢包死锁的情况吗?
ybh37
2014 年 8 月 9 日
@cloudhunter 以前遇到的情况也是突然出现大量死锁,最终经多方排查是交换机丢包导致。
跟微软那边确认了,如果从数据库发出去消息后,在接收ODBC之类的客户端驱动程序的数据包时,如果出现丢包,很有可能会出现数据库当前操作的线程锁定(大概是这个意思,记不太清了,08年前后的事情了)
cloudhunter
2014 年 8 月 9 日
@ybh37 谢谢你的信息。数据库那边没日志,死无对证啊,T_T。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/126916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX