MultiVersion Concurrency Control

MultiVersion Concurrency Control (MVCC, マルチバージョン コンカレンシー コントロール) は、データベース管理システムの可用性を向上させる制御技術のひとつ。複数のユーザから同時に処理要求が行われた場合でも同時並行性を失わずに処理し、かつ情報の一貫性を保証する仕組みが提供される。日本では多版型同時実行制御、多重バージョン並行処理制御などと訳される。また単にマルチバージョンとも呼ばれる。

 動作 
MVCCは、書き込み処理（トランザクション）が行われている最中に他のユーザによる読み取りアクセスがあった場合、書き込みの直前の状態（スナップショット）を処理結果として返す。つまり、書き込み中も読み取りができ、読み取り中でも書き込みができる。

MVCCにおいて可用性を達成するには、最低限、全ての処理が「どの順番で」行われたかを確実に記録する必要がある。そのため、タイムスタンプやトランザクションIDなどを用いて全ての更新処理が管理される。

なお、SQL規格(SQL92)で定められた4種類のトランザクション分離レベルにおいては、Read Committed (コミット済みデータは常に読み取る) に該当する処理である。

 歴史 
MVCCの考え方は、1981年に Philip A. Bernstein と Nathan Goodman により、 ACM Computing Surveys 誌上に掲載された。

 MVCCの考え方を採用するデータベース 
Rethink DB1.0 以降
Berkeley DB
DB2 9.7以降(CS with CC)
Firebird
H2 Database
InterBase
Microsoft SQL Server 2005以降のREAD_COMMITTED_SNAPSHOT
MySQL （ただし、エンジンに InnoDB を使用したとき）
Oracle Database Oracle 4 以降
SAP IQ
PostgreSQL6.5 以降
Zope Object Database
OrientDB

 MVCCの考え方を採用するその他のソフトウェア 
Clojureのソフトウェアトランザクショナルメモリ
バージョン管理システム全般

 関連項目 
Snapshot isolation
Serializable isolation
時刻印ロック
リード・コピー・アップデート

Category:データベース
Category:並行性制御アルゴリズム
Category:トランザクション処理
Category:長大な項目名