0

実稼働環境でデッドロック エラーが発生し続けています。ログファイルに以下のようなエラーメッセージ

2013-04-24 01:44:28,893 ERROR [gk.lvl1Executor-1] - Transaction (Process ID 68) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
2013-04-24 01:44:28,906 ERROR [gk.lvl1Executor-1] - Error in action
org.hibernate.exception.LockAcquisitionException: could not execute query

コードが原因で発生したこのエラー:

Transaction transaction = (Transaction) session.createQuery("from Transaction tr where " +
"tr.transactionId = :transId and " +
"tr.aseXml.flowDirection = :flowDirection and " + 
"tr.aseXml.header.to = :from and " +
"tr.aseXml.header.from = :to and " +
"tr.aseXml.header.market = :market and "+
"tr.aseXml.header.transactionGroup = :trGroup")
.setString("transId", aTransactionId)
.setString("flowDirection", aFlowDirection)
.setString("from", aHeader.getFrom())
.setString("to", aHeader.getTo())
.setString("market", aHeader.getMarket())
.setString("trGroup", aHeader.getTransactionGroup())
.setFetchSize(1)
.setMaxResults(1)
.setCacheable(true)
.uniqueResult();

これは単なる選択クエリです。なぜデッドロックが発生するのかわかりません。もう 1 つ言及する必要があるのは、分離レベルが に設定されていることREPEATABLE_READです。

4

0 に答える 0