プログラムで不可解な例外が発生しました:
ロック待機タイムアウトを超過しました。トランザクションを再起動してください。ネストされた例外は java.sql.BatchUpdateException: ロック待機タイムアウトを超過しました。トランザクションを再起動してください。
org.springframework.dao.CannotAcquireLockException: com.xxx.attack.mapper.RelationshipMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:267)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:192)
at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:217)
at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:240)
at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveBatch(ServiceImpl.java:136)
at com.baomidou.mybatisplus.extension.service.IService.saveBatch(IService.java:73)
一般的な意味は、ロック待機タイムアウトを超えました。トランザクションを再開してください。
確認したところ、MySQL でデッドロックが発生していることがわかりました。ここでは MySQL 8.0.32 を使用しています。
SQL を使用して以下を確認します。select * from information_schema.innodb_trx;
ロック テーブル レコードがあることがわかります:
KILL 29971; KILL の後の数字はtrx_mysql_thread_id
値を参照します。
上記の kill コマンドを実行すると、現在実行中のトランザクションを強制終了できます。