IT用語帳
PD-DNewデータベース · トランザクション処理

ライトスキュー

Write Skew

らいとすきゅー

スナップショット分離のもとで、2つのトランザクションが重なるデータを読み、その結果に基づいてそれぞれ別の行を更新してコミットした結果、両者を合わせると業務上の制約が破られる異状で、書込みスキューともいう。例えば「当直医が最低1人いる」ことを双方が確認してから別々の医師を外すと、当直が0人になる。同じ行への書込みの競合ではないので検出されず、SERIALIZABLEの隔離性水準か、読んだ行へのロック(SELECT ... FOR UPDATE)で防ぐ。

共有:

Related

関連キーワードの用語

A-1スキュー(skew)

同時に実行される複数のトランザクションが、関連する複数のデータを別々に読み書きすることで、データ間の整合性が崩れる異状。読取りスキューと書込みスキュー(write skew)があり、書込みスキューはMVCCによるスナップショット分離でも防げず、直列化可能な隔離性水準や明示的なロックで防ぐ。

PD-D同時実行制御(排他制御)

複数のトランザクションが同じデータに同時にアクセスしても、1つずつ順に実行した場合と同じ結果になる(直列化可能性)ように制御すること。制御しないと、変更の消失(ロストアップデート)、ダーティリード、ノンリピータブルリードなどの不整合が起きる。実現方式には、ロック方式、時刻印(タイムスタンプ)方式、楽観的方式、多版同時実行制御(MVCC)がある。

PD-DMVCC(多版同時実行制御)

データを更新するときに古い版を残し、複数の版を保持することで同時実行制御を行う方式。読取りを行うトランザクションは、開始時点などで確定していた版(スナップショット)を読むので、更新中のデータにロックを掛ける必要がなく、読取りと書込みが互いを待たせない。不要になった古い版を回収する処理が要り、スナップショット分離ではライトスキューのような異状を防げない。

PD-Dダーティリード

他のトランザクションが更新してまだコミットしていないデータを読み取ってしまう現象。更新した側が後でロールバックすると、存在しなかった値に基づいて処理したことになる。隔離性水準をREAD COMMITTED以上にすれば防げる。

PD-Dノンリピータブルリード

1つのトランザクションの中で同じ行を2回読んだとき、その間に他のトランザクションが行を更新・削除してコミットしたために、異なる値が読み取られる現象。反復不能読取りともいう。隔離性水準をREPEATABLE READ以上にすれば防げる。

PD-Dファントムリード

1つのトランザクションの中で同じ条件の検索を2回行ったとき、その間に他のトランザクションが条件に合う行を追加(または削除)してコミットしたために、結果の行の集合が変わる現象。既存の行へのロックでは防げず、SQL標準では隔離性水準をSERIALIZABLEにする必要がある。