![]() |
1
6
有时,show engine innodb status很难破译,因为它只显示事务中的当前语句。它不显示以前在同一事务中发生的语句,这些语句可能获取了实际持有的锁。 在您的情况下,事务2中的前一条语句获取了所讨论行的共享锁。 然后,事务1试图获取同一行上的独占锁,并愉快地等待共享锁被删除。 然后,事务2在另一条语句中试图获取同一行的独占锁。典型的僵局。两个事务都无法完成。
帮助避免这种死锁的一个解决方案是在事务2中用
|
![]() |
2
1
我很早以前就读过一些东西,不知道你会不会因此而遇到…没有看到当前事务的代码与它所冲突的内容。 在处理您的事务时,您应该尝试让它们始终按相同的顺序执行任何锁定…对于订单/订单明细/付款系统,请按照此处列出的所有类似订单的顺序执行活动。如果有另一个进程按“order detail/order”顺序尝试其事务,则可能导致死锁。 一个事务是先锁定订单,然后处理订单详细信息。另一个事务先锁定订单详细信息,然后尝试获取订单头。 高温高压 |
![]() |
3
-4
使用 SHOW ENGINE INNODB STATUS 以确定最新死锁的原因。这可以帮助您优化应用程序以避免死锁。 如果事务由于死锁而失败,请随时准备重新发出该事务。死锁并不危险。再试一次。 |