我在Spring调度程序作业上发现了一个场景。在进行批插入和批更新时,它返回**“DeadlockLoserDataAccessException”**异常。此场景大约每4到5个月发生一次。代码:getJdbcTemplate().batchUpdate("Update Query");你能建议我如何处理/解决这个问题吗?
getJdbcTemplate().batchUpdate("Update Query");
ivqmmu1c1#
由于你基本上没有给予任何信息,你所做的我们只能给出一般性的建议。1.请参阅数据库文档以了解如何调试死锁,尤其是如何了解哪些对象被锁定以及锁定对象是由哪些语句锁定的。使用此文档可了解应用程序的哪些部分发生了死锁。1.为了避免死锁,典型的策略是总是以相同的顺序获得锁。因此,如果需要访问和锁定两个表A和B,请确保总是先锁定A,然后再锁定B。如果不这样做,而是将两个表混合使用,一个会话可能首先锁定A,而另一个会话锁定B,导致两个会话都等待另一个会话释放它们的锁定,而这永远不会发生。
A
B
1条答案
按热度按时间ivqmmu1c1#
由于你基本上没有给予任何信息,你所做的我们只能给出一般性的建议。
1.请参阅数据库文档以了解如何调试死锁,尤其是如何了解哪些对象被锁定以及锁定对象是由哪些语句锁定的。使用此文档可了解应用程序的哪些部分发生了死锁。
1.为了避免死锁,典型的策略是总是以相同的顺序获得锁。因此,如果需要访问和锁定两个表
A
和B
,请确保总是先锁定A
,然后再锁定B
。如果不这样做,而是将两个表混合使用,一个会话可能首先锁定A
,而另一个会话锁定B
,导致两个会话都等待另一个会话释放它们的锁定,而这永远不会发生。