ホームページ >データベース >mysql チュートリアル >MySQL トランザクションのロック待機タイムアウト ロック待機タイムアウトを超えました; どうすればよいですか
問題が発生する環境:
1. 同じトランザクション内で同じデータを連続して挿入および更新する;
2. 複数のサーバーが同じデータベースを操作する;
3. 高い同時実行性が瞬時に発生します;
継続的に例外がスローされます、例外情報:
が含まれる可能性があります パラメータの設定中にエラーが発生しました SQL:-----以下はSQL文とスタック情報です--------org.springframework.dao.CannotAcquireLockException:
データベース更新エラー。 : java.sql.SQLException: ロック待機タイムアウトを超過しました; トランザクションを再起動してみてください
エラーには com.*.dao.mapper.PhoneFlowMapper.updateByPrimaryKeySelective-Inline
Mysql データベースは InnoDB モードを採用しています。デフォルトのパラメータ: innodb_lock_wait_timeout は、ロック待機時間を 50 秒に設定します。データベース ロックがこの時間を超えると、エラーが報告されます。
解決策
1. 次のステートメントを使用して、送信されたトランザクションのデータを検索し、スレッドを強制終了します。
select * from information_schema.innodb_trx
innodb_lock_wait_timeout=500
3. ストアド プロセスを最適化し、長時間の待機を回避します取引にかかる時間。
参考情報
2. 特定のテーブルのロックを待機中にトランザクションがタイムアウトしました。テーブルは別のプロセスによってロックされており、解放されていないと推定されます。
TransactionDeadLockDetectionTimeOut=10000 (10 秒に設定) を管理ノードの [ndbd default] 領域に追加します。デフォルトは 1200 (1.2 秒) 4 、InnoDB はデッドロックとロールバックを自動的に検出するか、デッドロック状況を終了します。
InnoDB は、トランザクションのデッドロックを自動的に検出し、トランザクションをロールバックしてデッドロックを解消します。InnoDB は、ロールバックする小さなトランザクションを選択しようとします。トランザクションのサイズは、挿入された行数によって決まります。
以上がMySQL トランザクションのロック待機タイムアウト ロック待機タイムアウトを超えました; どうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。