ロック待ちタイムアウトオーバーエラーが発生しました。以下は例外です:
org.springframework.dao.CannotAcquireLockException:
### Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
### The error may involve commManager.updateOrderHotelInfo-Inline
### The error occurred while setting parameters
### Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:261)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
at $Proxy21.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:246)
春のトランザクション設定
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
Spring アノテーション @Transactional を使用すると、例外がスローされますが、 @Transactional(propagation=Propagation.REQUIRES_NEW) に変更すれば問題ありません。
MySqlServer で show engine innodb status \G を実行し、これらを出力します。 s)、元に戻すログ エントリ 1 MySQL スレッド ID 23795、OS スレッド ハンドル 0x50e8a940、クエリ ID 207416339 192.168.126.236 ppb Updating UPDATE Commission_order_hotel_info_ext SET audit_tel = '0898-88350052',
global_commission_percent = 10.00,
guarantee = '{\"type\":\"none\"}'
WHERE
hotel_id = 10190
Trx 読み取りビューでは、id >= 107D2F82 の trx は表示されず、< 107D1795 が表示されます ------- TRX は、このロックが付与されるまで 18 秒間待機しています:
RECORD LOCKS スペース ID 3123 ページ番号 3 n ビット 128PRIMARY
テーブルのインデックスhms
。commission_order_hotel_info_ext
trx id 107D2F81 lock_mode X 待機中
TABLE LOCK テーブルhms
。order_hotel_info
trx id 107D2F81 ロック モード IX RECORD LOCKS スペース ID 2874 ページ番号 16 n ビット 1272uniq_hotel_id
テーブルのインデックスhms
。order_hotel_info
trx id 107D2F81 lock_mode X は rec をロックしますが、ギャップはロックしません RECORD LOCKS スペース ID 2874 ページ番号 6 n ビット 184PRIMARY
テーブルのインデックスhms
。order_hotel_info
trx id 107D2F81 lock_mode X は rec をロックしますが、gap TABLE LOCK table はロックしませんhms
。commission_order_hotel_info_ext
trx id 107D2F81 ロック モード IX RECORD LOCKS スペース ID 3123 ページ番号 3 n ビット 128PRIMARY
テーブルのインデックスhms
。commission_order_hotel_info_ext
trx id 107D2F81 lock_mode X 待機中 ---TRANSACTION 107D1795、ACTIVE 845 秒 5 ロック構造体、ヒープ サイズ 1248、59 行ロック、元に戻すログ エントリ 2 MySQL スレッド ID 23819、OS スレッド ハンドル 0x50dc7940、クエリ ID 207389624 192.168.126.83 ppb Trx 読み取りビューでは、id >= 107D1796 の trx は表示されず、< 107D1796 TABLE LOCK table が表示されますhms
。order_hotel_info
trx id 107D1795 ロック モード IX RECORD LOCKS スペース ID 2874 ページ番号 16 n ビット 1272uniq_hotel_id
テーブルのインデックスhms
。order_hotel_info
trx id 107D1795 lock_mode X は rec をロックしますが、ギャップはロックしません RECORD LOCKS スペース ID 2874 ページ番号 44 n ビット 232PRIMARY
テーブルのインデックスhms
。order_hotel_info
trx id 107D1795 lock_mode X は rec をロックしますが、gap TABLE LOCK table はロックしませんhms
。commission_order_hotel_info_ext
trx id 107D1795 ロック モード IX RECORD LOCKS スペース ID 3123 ページ番号 3 n ビット 128PRIMARY
テーブルのインデックスhms
. commission_order_hotel_info_ext
trx id 107D1795 lock_mode X
それを解決するための手順