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モジュールを使用するいくつかのシナリオ
視覚効果が非常に美しく、訪問者に強い印象を残すことがわかります。さらに、重要なポイントが強調され、訴...
一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...
MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...
起動時に Ubuntu デュアル システムが停止する問題の解決方法 (Ubuntu 16.04 およ...
みなさんこんにちは。今日はカルーセルの実装についてお話しします。私が作成したカルーセルの効果は次のと...
Mac 用 MySQL をダウンロード: https://downloads.mysql.com/a...
フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...
CSS は Web ページで非常に重要な役割を果たします。近年の CSS の発展に伴い、疑似要素/疑...
目次1. イベントとは何ですか? 2. 「イベント」機能を有効にする1. 機能が有効になっているかど...
序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...
目次序文関連資料Vue プロジェクトが 2 次元ハイパーグラフを導入ハイパーグラフ 2D ケース引用...
設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...
この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...
序文SSH 経由でさまざまなリモート システムに頻繁にアクセスする場合は、このトリックを使用すると時...
プロパティやイベントがあるにもかかわらず、JavaScript で子コンポーネントに直接アクセスする...