MySQLのギャップロックと隣接ロックの違い

MySQL のギャップロックとネクストキーロックは、複数のトランザクションが同一のデータ範囲に対して同時に操作する場合に処理するため、並行制御に用いられるロックの仕組みです。その違いは次のとおりです。

  1. ロックの範囲は、ギャップロックはインデックス範囲の間にあるギャップに対してロックするが、レコードロックはインデックスレコードに対してロックする。
  2. 間隙ロックは他のトランザクションによるインデックスレコードの新规挿入を防ぎ、ファントムリードを回避するために主に使用されます。一方、近接ロックは他のトランザクションによる範囲クエリ内のレコードの挿入や更新を防ぎ、ノンリピータブルリードを回避するために使用されます。
  3. ロック粒度:ギャップロックはロック粒度が大きく、ギャップ全体をロックするのに対し、キーロックはロック粒度が小さく、インデックスレコードのみをロックする。
  4. 排他制御:ギャップロックは互いに排他的が、ギャップごとに複数のトランザクションが同時にロックをかけることができる、キーロックはギャップロックとも排他的で、同一インデックスのレコードに対しては複数のトランザクションが同時にロックをかけられない。
  5. ロックの階層は、間隙ロック(ギャップロック)はRR(Repeatable Read)とSERIALIZABLEの階層で使用され、キーロックはRRで使用されます。

全体としてギャップロックは幻読防止の用途、一時ロックは非コミット可能読込防止の用途が中心で、ロック粒度が異なる。

bannerAds