重要 ⏱ 8分★★★★☆

同時実行制御

2PL・MVCC・楽観的ロック・直列化可能性を完全習得

複数のトランザクションが同時に実行される環境で、データの整合性を保ちながら高スループットを実現するための制御技術。適切な制御がないと読み取り異常・更新異常が発生する。

異常発生条件説明
ダーティリードREAD UNCOMMITTEDコミット前データを読む。後でロールバックされると不整合
ノンリピータブルリードREAD COMMITTED以下同一トランザクション内で同じ行を2回読むと値が変わる
ファントムリードREPEATABLE READ以下同一範囲検索で行数が変わる(挿入・削除による)
更新の喪失同時更新時2つのTXが同じ行を読んで更新すると一方の変更が消える
手法概要特徴
2相ロック(2PL)ロック獲得フェーズと解放フェーズを分離直列化可能性を保証。デッドロックあり
MVCC(多版同時実行制御)更新前のスナップショットを残し古い版を参照させる読み取りがブロックされない。PostgreSQL/MySQL採用
楽観的ロックコミット時にバージョン番号で競合チェック競合が少ない場合に効率的
タイムスタンプ順序TXのタイムスタンプで操作順序を決定デッドロックなし。古いTXをアボートする可能性

更新時に古いバージョンを保持し、同時実行するトランザクションに適切なバージョンを見せる。

TX1 が行を更新 → 新バージョンを作成し、古いバージョンを保持
TX2 が同じ行を読む → TX2 の開始時点のスナップショット(古いバージョン)を返す
TX1 がコミット → 新バージョンが確定。TX2 はコミット後に新バージョンを参照可能
古いバージョンは全TXから不要になった時点でバキューム(削除)
MVCC の最大メリット:「読み取りが書き込みをブロックしない、書き込みが読み取りをブロックしない」。高い同時実行性を実現。

複数TXの同時実行が何らかの直列実行と等価な結果を生み出すとき、そのスケジュールは直列化可能(serializable)と呼ぶ。

📝 理解度チェック

MVCC(多版同時実行制御)の最大のメリットはどれか?
2相ロック(2PL)の「2相」とは何の2段階か?
「更新の喪失(Lost Update)」はどのような状況で発生するか?

読了ボタンを누すとトップページの進捉に反柼されます