我正在使用jOOQ数据库抽象层与MySql数据库进行通信。
我一直收到以下错误:
SQL [null]; Deadlock found when trying to get lock; try restarting transaction
这是在将大约500行的批量插入表中。这些批量插入很可能会从不同的线程中一次尝试。
导致死锁的原因是什么,我该如何避免死锁?
答案 0 :(得分:2)
传统的死锁是指一个事务试图锁定A然后是B,而另一个试图锁定B然后是A,导致两者都无法完成。当特定资源上存在太多挂起锁时,MySQL会产生另一种死锁。
您应该检查SHOW PROCESSLIST
以查看您有多少“等待锁定”进程。可能是那些失败的人只是运气不好,因为有太多不合适。