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

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

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

https://www.v2ex.com/t/126916

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

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

© 2021 V2EX