データベース・トランザクション・アイソレーション・テクノロジーのNext-Key Locks
782 ワード
Next-Key Locks
Next-Key LocksはMySQLのInnoDBストレージエンジンのロック実装である.
MVCCは幻読みの問題を解決できず、Next-Key Locksはこの問題を解決するために存在する.繰り返し読み取り可能(REPEATABLE READ)独立性レベルでは、MVCC+Next-Key Locksを使用して幻読みの問題を解決できます.
Record Locks
レコード自体ではなく、レコード上のインデックスをロックします.
テーブルにインデックスが設定されていない場合、InnoDBはプライマリ・キーに非表示のクラスタ・インデックスを自動的に作成するので、Record Locksは依然として使用できます.
Gap Locks
インデックス間のギャップをロックしますが、インデックス自体は含まれません.たとえば、1つのトランザクションが次の文を実行すると、他のトランザクションはt.cに15を挿入できません.
Next-Key Locks
レコード上のインデックスだけでなく、インデックス間のギャップもロックするRecord LocksとGap Locksの組み合わせです.たとえば、インデックスには、10、11、13、and 20の値が含まれています.次の区間をロックする必要があります.
Next-Key LocksはMySQLのInnoDBストレージエンジンのロック実装である.
MVCCは幻読みの問題を解決できず、Next-Key Locksはこの問題を解決するために存在する.繰り返し読み取り可能(REPEATABLE READ)独立性レベルでは、MVCC+Next-Key Locksを使用して幻読みの問題を解決できます.
Record Locks
レコード自体ではなく、レコード上のインデックスをロックします.
テーブルにインデックスが設定されていない場合、InnoDBはプライマリ・キーに非表示のクラスタ・インデックスを自動的に作成するので、Record Locksは依然として使用できます.
Gap Locks
インデックス間のギャップをロックしますが、インデックス自体は含まれません.たとえば、1つのトランザクションが次の文を実行すると、他のトランザクションはt.cに15を挿入できません.
SELECT c FROM t WHERE c BETWEEN 10 and 20 FOR UPDATE;
Next-Key Locks
レコード上のインデックスだけでなく、インデックス間のギャップもロックするRecord LocksとGap Locksの組み合わせです.たとえば、インデックスには、10、11、13、and 20の値が含まれています.次の区間をロックする必要があります.
(negative infinity, 10]
(10, 11]
(11, 13]
(13, 20]
(20, positive infinity)