ホームページ > データベース > mysql チュートリアル > MySQL トランザクションのロック待機タイムアウト ロック待機タイムアウトを超えました; どうすればよいですか

MySQL トランザクションのロック待機タイムアウト ロック待機タイムアウトを超えました; どうすればよいですか

PHPz
リリース: 2023-06-03 11:32:47
転載
3059 人が閲覧しました

問題のシナリオ

問題が発生する環境:
1. 同じトランザクション内で同じデータを連続して挿入および更新する;
2. 複数のサーバーが同じデータベースを操作する;
3. 高い同時実行性が瞬時に発生します;

継続的に例外がスローされます、例外情報:

org.springframework.dao.CannotAcquireLockException:

データベース更新エラー。 : java.sql.SQLException: ロック待機タイムアウトを超過しました; トランザクションを再起動してみてください

エラーには com.*.dao.mapper.PhoneFlowMapper.updateByPrimaryKeySelective-Inline

が含まれる可能性があります パラメータの設定中にエラーが発生しました

SQL:-----以下はSQL文とスタック情報です--------


原因分析

高入力時同時実行の場合、Spring トランザクションはデータベースのデッドロックを引き起こし、後続の操作がタイムアウトして例外をスローします。

Mysql データベースは InnoDB モードを採用しています。デフォルトのパラメータ: innodb_lock_wait_timeout は、ロック待機時間を 50 秒に設定します。データベース ロックがこの時間を超えると、エラーが報告されます。

解決策

1. 次のステートメントを使用して、送信されたトランザクションのデータを検索し、スレッドを強制終了します。

select * from information_schema.innodb_trx
ログイン後にコピー

2. ロック待機時間を増やす、つまり次の設定項目のパラメータ値を秒単位で増やします

innodb_lock_wait_timeout=500
ログイン後にコピー

3. ストアド プロセスを最適化し、長時間の待機を回避します取引にかかる時間。

参考情報

1. ロック待機タイムアウト。これは、現在のトランザクションが他のトランザクションがロック リソースを解放するのを待っていることが原因で発生します。ロック リソースを巡って競合するテーブルやステートメントを見つけたり、SQL を最適化したり、インデックスを作成したりできます。それでも問題が解決しない場合は、同時スレッドの数を適切に減らすことができます。


2. 特定のテーブルのロックを待機中にトランザクションがタイムアウトしました。テーブルは別のプロセスによってロックされており、解放されていないと推定されます。

SHOW INNODB STATUS/G; を使用して、ロックの状況を確認できます。

3. 解決策を検索して追加:
TransactionDeadLockDetectionTimeOut=10000 (10 秒に設定) を管理ノードの [ndbd default] 領域に追加します。デフォルトは 1200 (1.2 秒)

4 、InnoDB はデッドロックとロールバックを自動的に検出するか、デッドロック状況を終了します。


InnoDB は、トランザクションのデッドロックを自動的に検出し、トランザクションをロールバックしてデッドロックを解消します。InnoDB は、ロールバックする小さなトランザクションを選択しようとします。トランザクションのサイズは、挿入された行数によって決まります。

####パラメータ innodb_table_locks=1 および autocommit=0 の場合、InnoDB はテーブルのデッドロックと MySQL レベルの行レベルのロックに注意を払います。さらに、InnoDB は MySQL Lock Tables コマンドやその他のストレージ エンジンのデッドロックを検出しません。この状況を解決するには、innodb_lock_wait_timeout を設定する必要があります。 ###innodb_lock_wait_timeout は、Innodb が行レベルのロックを放棄するためのタイムアウトです。 ###

以上がMySQL トランザクションのロック待機タイムアウト ロック待機タイムアウトを超えました; どうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート