如何避免MySql死锁?

时间:2012-08-18 18:37:24

标签: mysql database-deadlocks jooq batch-insert

我正在使用jOOQ数据库抽象层与MySql数据库进行通信。

我一直收到以下错误:

SQL [null]; Deadlock found when trying to get lock; try restarting transaction 

这是在将大约500行的批量插入表中。这些批量插入很可能会从不同的线程中一次尝试。

导致死锁的原因是什么,我该如何避免死锁?

1 个答案:

答案 0 :(得分:2)

传统的死锁是指一个事务试图锁定A然后是B,而另一个试图锁定B然后是A,导致两者都无法完成。当特定资源上存在太多挂起锁时,MySQL会产生另一种死锁。

您应该检查SHOW PROCESSLIST以查看您有多少“等待锁定”进程。可能是那些失败的人只是运气不好,因为有太多不合适。