目前我们有一款在线的产品。总是会出现死锁,同时郁闷的是目前状态是DBA空缺目前解决方法:为了不影响客户使用。我降低了默认的50秒锁等待时间,变成了3秒。
同事创建了一个innodb_monitor。那个20秒记录一次innodb status的状态。***********************************
************ 问题来了 *************
***********************************1. 如果得到innodb历史的死锁信息。show engine innodb status;
貌似只是返回当前死锁的状态。但是我不知道什么时候他会清除。
2. 我安装了innodb plugin,同事开启了INNODB_TRX, INNODB_LOCKS and INNODB_LOCK_WAITS 但是我发现这三个表好像也只是当前的数据。难道就没有一个历史记录吗???
3. 如何更好的查死锁?因为我们是在线产品。私下测试不会有死锁。
但是在线的话也需要确保用户使用的啊。
所以我没办法在线调试,我只能将这些log收集,然后私下分析。我看了一些文章,都是一些简单的sql死锁的模拟,但是现在sql语句很多,
也不知道那个死锁。同时我也只能拿到sql的LOG。并没有机器权限。也就是在不能实时调试的情况下,大家有没有什么好的建议??

解决方案 »

  1.   

    show engine innodb status有
    LATEST DETECTED DEADLOCK
      

  2.   

    把你的SHOW INNODB STATUS打印出来的信息贴出来看看。
      

  3.   

    楼主 可以用一下,这个工具,sysbench  可以模拟oltp系统进行分析另外楼主  把你的表结构给出来啊,死锁也和索引有关啊,或者查看一下slow-log分析一下那些query用的时间比较长!
      

  4.   

    死锁90%是程序员的事,5%是机子差。跟dba没什么太大关系。1缩小你的事物,
    2死锁了就重试即可。