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
* 時刻印ロック
* リード・コピー・アップデート