MVCC(多版同時実行制御)
Multi-Version Concurrency Control
えむぶいしーしー
データを更新するときに古い版を残して複数の版を保持し、各トランザクションには開始時点などで確定していた版を読ませる同時実行制御の方式。読取りがロックを必要とせず、読取りと書込みが互いを待たないため、同時実行性が高い。多くの関係データベース製品が採用している。
Related
他の資格での定義
データの複数のバージョンを保持し、各トランザクションが適切なバージョンを参照する同時実行制御方式。読取りがロックを必要としないため、読取りと書込みが互いにブロックしない。PostgreSQLやOracleが採用。
データを更新するときに古い版を残し、複数の版を保持することで同時実行制御を行う方式。読取りを行うトランザクションは、開始時点などで確定していた版(スナップショット)を読むので、更新中のデータにロックを掛ける必要がなく、読取りと書込みが互いを待たせない。不要になった古い版を回収する処理が要り、スナップショット分離ではライトスキューのような異状を防げない。
データの複数のバージョンを保持し、各トランザクションが適切なバージョンを参照する同時実行制御方式。読取りがロックを必要としないため、読取りと書込みが互いにブロックしない。PostgreSQLやOracleが採用。
Past Exams
過去問での出題
過去問で 4 回出題(データベーススペシャリスト試験 3・応用情報技術者試験 1)
出典: 独立行政法人情報処理推進機構(IPA)の過去問題。問題文は IPA のサイトの PDF で確認できます。「選択肢」は、問題文ではなく選択肢に出たものです。用語名で照合しているため、関係の薄い問題が含まれることがあります。
Related
関連キーワードの用語
各トランザクションが、ロックを獲得するだけのロック拡張相と、解放するだけのロック縮小相の2つに分けてロックを扱う規約で、一度ロックを解放したら新たなロックは獲得しない。全トランザクションがこれに従えば直列化可能性が保証されるが、デッドロックは防げない。ロックをコミットまで保持する厳格な2相ロックにすると、他のトランザクションの未確定データを読む連鎖的な取消しも防げる。
他のトランザクションが更新してまだコミットしていないデータを読み取ってしまう現象。更新した側が後でロールバックすると、存在しなかった値に基づいて処理したことになる。隔離性水準をREAD COMMITTED以上にすれば防げる。
1つのトランザクションの中で同じ行を2回読んだとき、その間に他のトランザクションが行を更新・削除してコミットしたために、異なる値が読み取られる現象。反復不能読取りともいう。隔離性水準をREPEATABLE READ以上にすれば防げる。
1つのトランザクションの中で同じ条件の検索を2回行ったとき、その間に他のトランザクションが条件に合う行を追加(または削除)してコミットしたために、結果の行の集合が変わる現象。既存の行へのロックでは防げず、SQL標準では隔離性水準をSERIALIZABLEにする必要がある。
複数のトランザクションが同じデータに同時にアクセスしても、データの整合性が保たれるように実行を制御すること。ロック方式のほか、時刻印方式や多版同時実行制御(MVCC)などの方式があり、結果が何らかの順序で1つずつ実行した場合と同じになること(直列可能性)を目指す。
2つ以上のトランザクションやプロセスが、互いに相手が確保している資源の解放を待ち続け、どれも処理を先に進められなくなる状態。DBMSは待ちグラフなどで検出し、いずれかのトランザクションをロールバックして解消する。資源を確保する順序を統一することで発生を防げる。
