目前我们有一款在线的产品。总是会出现死锁,同时郁闷的是目前状态是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。并没有机器权限。也就是在不能实时调试的情况下,大家有没有什么好的建议??
同事创建了一个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。并没有机器权限。也就是在不能实时调试的情况下,大家有没有什么好的建议??
LATEST DETECTED DEADLOCK
2死锁了就重试即可。