最近遇到一个MYSQL update语句出现Deadlock found when trying to get lock的问题,分析一下原因。
什么情况下会出现Deadlock found when trying to get lock?
https://dev.mysql.com/doc/refman/5.6/en/innodb-deadlocks.html
出现死锁需要2个条件:
1)至少2个client(A,B)同时在执行事务
2)clientA锁定了某一行,未提交事务,此时clientB也需要update/delete这一行,此时clientB就会进入等待状态,直到出现Deadlock 。
如何减少死锁的发生?
很重要的两点,就可以避免这种情况
1)事务操作锁定的行数较少(更精确的索引条件)。
2)保证事务较短的执行时间,完成后马上提交。
这里有更加详细的描述:
https://dev.mysql.com/doc/refman/5.6/en/innodb-deadlocks-handling.html
-