我正在使用MYSQL中的表名「test」,它在事務T1期間鎖定,將在20分鐘內完成。當我在這20分鐘內通過另一個事務T2更新這個表時。我得到一個例外: -java.sql.SQLException:超出鎖定等待超時;嘗試在MYSQL中重新啓動事務異常
11:58:38,584 ERROR [STDERR] java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
11:58:38,584 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
11:58:38,584 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
11:58:38,584 ERROR [STDERR] at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1124)
11:58:38,584 ERROR [STDERR] at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:676)
請提供給我的解決方案,我怎麼能做到這一點事務T2沒有得到這個例外?
更新mysql數據庫中的innodb_lock_wait_timeout的值是否正確,以解決此異常。我期待爲這個問題找到任何有用的解決方案。
感謝您的回答。但是這個事務T1(在各種表上保持鎖定)將在一天內通過事件調度器執行一次歸檔目的。我希望在該事務期間對這些表執行一些其他活動。運行此事務是強制性的,所以請讓我知道有什麼方法可以解決這個問題? –
事務T2正在讀寫這兩種事務。 –
歸檔活動是否必須在一個事務中?解決這個問題的一個顯而易見的方法是在每一個陳述之後提交或者將其分解爲更合理大小的交易。 –