V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cloudhunter
V2EX  ›  数据库

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

  •  
  •   cloudhunter · 2014-08-09 13:05:50 +08:00 · 1667 次点击
    这是一个创建于 3761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库是SQL Server 2008,前一阵出现很多并发写操作,然后日志就报死锁异常了。遇到死锁的时候要一般要怎样处理?用ActiveMQ之类的任务队列把并发操作变成串行,还是死锁之后重试?
    8 条回复    2014-08-09 22:50:23 +08:00
    canesten
        1
    canesten  
       2014-08-09 13:28:08 +08:00
    先查日志
    分析一下怎么锁的
    CosWind
        2
    CosWind  
       2014-08-09 14:53:21 +08:00
    高级别事务或者乐观锁配合稍低级别事务
    ybh37
        3
    ybh37  
       2014-08-09 14:59:01 +08:00
    先分析死锁原因吧。
    尽量不用Update
    频繁的修改操作尽量用insert替代。
    如果是通信丢包造成的死锁,尽快更换网络设备。
    cloudhunter
        4
    cloudhunter  
    OP
       2014-08-09 16:03:40 +08:00
    @canesten 谢谢,我们一开始没想到会出现死锁问题,然后数据库好像就没开启任何这方面的日志记录
    cloudhunter
        5
    cloudhunter  
    OP
       2014-08-09 16:04:11 +08:00
    @CosWind 谢谢你我Google研究下你说的东西
    cloudhunter
        6
    cloudhunter  
    OP
       2014-08-09 16:08:26 +08:00
    @ybh37 所有的操作都是delete / insert,没有update。通信丢包也能造成死锁的吗?其实我们的程序之前一直运行的好好的,就是前一阵突然出现大量死锁才引起注意。可能就是你说的原因。请问你之前是遇到通信丢包死锁的情况吗?
    ybh37
        7
    ybh37  
       2014-08-09 21:36:56 +08:00
    @cloudhunter 以前遇到的情况也是突然出现大量死锁,最终经多方排查是交换机丢包导致。
    跟微软那边确认了,如果从数据库发出去消息后,在接收ODBC之类的客户端驱动程序的数据包时,如果出现丢包,很有可能会出现数据库当前操作的线程锁定(大概是这个意思,记不太清了,08年前后的事情了)
    cloudhunter
        8
    cloudhunter  
    OP
       2014-08-09 22:50:23 +08:00
    @ybh37 谢谢你的信息。数据库那边没日志,死无对证啊,T_T。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:11 · PVG 19:11 · LAX 03:11 · JFK 06:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.