Mysql 常: ロック待機タイムアウトを超過しました; トランザクションを再開してみてください;

プログラムで不可解な例外が発生しました:
ロック待機タイムアウトを超過しました。トランザクションを再起動してください。ネストされた例外は 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 コマンドを実行すると、現在実行中のトランザクションを強制終了できます。

おすすめ

転載: blog.csdn.net/linmengmeng_1314/article/details/130943537