我正在使用jOOQ数据库抽象层与MySql数据库交谈。
我不断收到以下错误:
SQL [null]; Deadlock found when trying to get lock; try restarting transaction
这是在将大约 500 行大容量插入到表中期间。 可能会一次从不同的线程尝试多个这些批量插入。
是什么导致了死锁,我怎样才能避免它?
传统的死锁是指一个事务试图锁定 A,然后锁定 B,而另一个事务试图锁定 B,然后是 A,从而导致两者都无法完成的情况。当特定资源上有太多挂起的锁时,MySQL 会产生另一种死锁。
您应该检查SHOW PROCESSLIST
以查看您有多少个"等待锁定"进程。失败的可能只是运气不好,因为排队的人太多了。