Mysql InnoDB 行ロックの 3 つのアルゴリズム 注 1

3つのロックアルゴリズム

レコード ロック: 単一行レコードのロック
ギャップ ロック: ギャップ ロック、範囲をロックしますが、レコード自体は含まれません
ネクスト キー ロック: ギャップ ロック + レコード ロック、範囲をロックし、レコード自体をロックします

レコードロック

  1. Record Lock は常にインデックス レコードをロックします。InnoDB ストレージ エンジン テーブルの作成時にインデックスが設定されていない場合、InnoDB ストレージ エンジンは暗黙的な主キーを使用してロックします。

ネクストキーロック

  1. Next-Key Lock は、Gap Lock と Record Lock を組み合わせたロック アルゴリズムです。Next-Key Lock アルゴリズムでは、InnoDB は行クエリにこのロック アルゴリズムを使用します。たとえば、インデックスに 10、11、13、および 20 の 4 つの値がある場合、インデックスが Next-Key Locked にできる範囲は次のとおりです。 ただし、クエリされたインデックスに一意の属性が含まれている場合、InnoDB ストレージ エンジン
    ここに画像の説明を挿入
    はNext-Key Lock Optimization を実行し、それを Record Lock にダウングレードします。つまり、範囲ではなくインデックス自体のみをロックします。
    以下の例を見てください。まず、次のコードに従ってテスト テーブル t を作成します。
CREATE TABLE t a INT PRIMARY KEY
INSERT INTO t SELECT 1
INSERT INTO SELECT 2
INSERT INTO t SELECT 5

ここに画像の説明を挿入

テーブル t には 1、2、5 の 3 つの値があります。上記の例では、最初にセッション A の a=5 に対して X ロックが実行されます。a は主キーであり一意であるため、範囲 (2,5) ではなく値 5 のみがロックされるため、セッション B に値 4 をブロックせずに挿入すると、すぐに挿入して返すことができます。つまり、ロックは Next-Key Lock アルゴリズムによってダウングレードされ、アプリケーションの同時実行性が向上します。

おすすめ

転載: blog.csdn.net/itlijinping_zhang/article/details/117035422