Learn VisualLearn DB Visual
EN

同時実行のどの影響を見せるか決める

分離レベルは、同時に実行される処理の変更が、互いにどこまで見えるかを決めます。同じ行を2回読む間に別のトランザクションがその値を更新し、1回目と2回目で違う値が見えることを非再現読み取りと呼びます。範囲条件で2回検索する間に、別のトランザクションが該当する行を追加・削除し、2回の検索結果に含まれる行の集合が変わることをファントムリードと呼びます。PostgreSQLのRead UncommittedはRead Committedとして動きます。例えば価格が100から120に更新されたとき、Read Committedでは同じトランザクション内でも2回目の読み取りで120が見えますが、Repeatable Readは安定したスナップショットを使うため100を見続け、非再現読み取りとファントムリードの両方を防ぎます。ただし、複数のトランザクションの組み合わせ次第で本来あり得ない結果になる直列化異常は残ります。Serializableはこの直列化異常も検出するため、失敗時は再試行します。

直列化失敗後に必要な処理は?