1. デッドロックとは何ですか? 正式な定義は次のとおりです: 2 つのトランザクションが相手側で必要なロックを保持し、相手側がロックを解放するのを待機しており、どちらの側も独自のロックを解放しません。 これは、自分と相手が人質を取っていて、二人で人質交換の交渉をするようなものです。あなたは相手にプレーヤーを解放するように求め、相手もあなたにプレーヤーを解放するように求めます。 2. デッドロックはなぜ発生するのでしょうか? これを見ると、こんな疑問が湧くかもしれません。トランザクションはネゴシエーションとは異なります。トランザクションはロックを使用した後すぐにロックを解除できないのはなぜでしょうか?操作が完了した後もロックを保持する必要がありますか?これには、MySQL の同時実行制御が関係します。 MySQL には同時実行制御の方法が 2 つあります。1 つは MVCC で、もう 1 つは 2 フェーズ ロック プロトコルです。では、なぜ同時実行制御が必要なのでしょうか?これは、複数のユーザーが同時に MySQL を操作する場合、同時実行性能を向上させるために、複数のユーザーからのリクエストをシリアルに実行する必要があるためです (シリアル化可能なスケジューリング)。具体的な同時実行制御についてはここでは説明しません。 2 フェーズ ロック プロトコルについてさらに詳しく説明しましょう。 2 フェーズ ロック プロトコル (2PL) 公式定義: 2 フェーズ ロック プロトコルとは、すべてのトランザクションが 2 フェーズでデータをロックおよびロック解除する必要があることを意味します。データの読み取りまたは書き込みを行う前に、トランザクションはまずデータのロックを取得する必要があります。ロックを解除すると、トランザクションは他のロックを適用したり取得したりできなくなります。 MySQL に対応して、2 つのステージに分かれています。
つまり、2 段階ロック プロトコルに従うことによってのみ、シリアル化可能なスケジューリングを実現できます。 ただし、2 フェーズ ロック プロトコルでは、トランザクションが使用する必要があるすべてのデータを一度にロックする必要はなく、ロック フェーズでは順序の要件がないため、この同時実行制御方法ではデッドロックが発生します。 3. MySQL はデッドロックをどのように処理しますか? MySQL には 2 つのデッドロック処理方法があります。
パフォーマンス上の理由から、デッドロックの処理には通常、デッドロック検出が使用されます。 デッドロック検出 デッドロック検出の原理は、トランザクションを頂点、ロックを辺とする有向グラフを構築し、有向グラフにサイクルがあるかどうかを判断することです。サイクルがある場合は、デッドロックがあります。 ロールバック デッドロックが検出されると、INFORMATION_SCHEMA.INNODB_TRX テーブルの trx_weight フィールドに基づいて、挿入、更新、または削除された行数が最も少ないトランザクションがロールバック対象として選択されます。 4. デッドロックを回避する方法 デッドロック情報を収集します。
デッドロックを減らす:
上記は、MySQL (InnoDB) がデッドロックを処理する方法についての詳細な説明です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Vue は URL に基づいて非同一オリジンのファイルをどのようにダウンロードするのか
>>: Nginx Rewriteモジュールを使用するいくつかのシナリオ
1. コマンドの紹介passwd コマンドは、ユーザー パスワード、アカウント ロック、パスワードの...
<!DOCTYPE html> <html lang="ja"...
序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...
1.テーブル全体を更新します。データ行の列の値が空の場合は、別の列フィールドの値と同じにします。 ...
<br />ウェブサイトを科学的にデザインする: アイトラッキング研究から学ぶ 23 の...
1. セットアップを始める次のコード関数を簡単に紹介します。 ref 関数を使用して変数の変更を監視...
今日、CSDN の Q&A セクションで友人が質問をしているのを見ました。彼は 1 次元配列...
1. サービス方法ファイアウォールのステータスを確認します。 [root@centos6 ~]# サ...
目次簡単なコンポーネントの例より複雑な親子コンポーネントのケースオンセレクトの書き方反応する子供Re...
目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...
Docker はますます成熟し、その機能もますます強力になっています。 Docker Stack を...
インストールREADMEに従ってインストールしてくださいドキュメントには、exa は Rust で実...
目次1: 単一マシンのパスワードフリーログイン構成1. 仮想マシンのホスト名を設定する2. 仮想マシ...
Vueバージョンをファイルにコピーして使用します <テンプレート> <!-- カル...
Ubuntu 18.04.4 に MySQL をインストールするプロセスを見てみましょう。内容は次の...