Kush's Wiki

トランザクション分離レベル

commited date: 2024-03-23

#Database

ACIDのうち、I(Isolation)について言及するような分離性のレベル。

RDBMS間で共通して4つの分離レベルがあるが、分離レベルの命名が異なるケースがあり曖昧になっている。

  • Read Uncommitted
    • コミットされていない未確定のデータを読み取るダーティリードが発生する
  • Read Committed
    • ダーティリード、ダーティライトが生じない
  • Snapshot Isolation
    • OracleではSERIALIZABLE、PostgreSQLやMySQLではRepeatable Readと呼ばれるため曖昧
    • 読み取りスキュー(nonrepeatable read)が生じない、読み取りはロックを取らず常にトランザクション開始時のスナップショットを参照する
    • スナップショットとして複数のバージョンを保持するためMVCC(multi-version concurrency controll)の手法が用いられる
  • Serializable
    • 書き込みスキュー(ファントム)が生じない、複数のレコードを跨いだ一貫性を保証する
    • ユニーク制約によって書き込みスキューを防止できない際に必要となる
    • 全てのトランザクションが直列で実行されるように振る舞うことで直列化可能と呼ばれる