本文へスキップ

MVCCとは?

えむぶいしーしー

MVCCとは、データベース読み取りと書き込みを互いにブロックせずに同時処理できるようにする並行制御の仕組みです。

MVCC(Multi-Version Concurrency Control、多版型同時実行制御)は、データベース管理システムにおいてトランザクションの同時実行を効率よく管理するための手法です。従来のロックベースの排他制御では、書き込み中のデータに読み取りアクセスが来た場合にブロック(待機)が発生しますが、MVCCではデータの複数バージョンを保持することでこの問題を解消します。

仕組みの核心は「スナップショット読み取り」にあります。トランザクションが開始された時点のデータスナップショットを読み取り対象とするため、他のトランザクションが同じデータを更新していても待機が発生しません。更新時には古いバージョンを残しつつ新しいバージョンを書き込み、どのトランザクションにどのバージョンを見せるかをタイムスタンプやトランザクションIDで管理します。

MVCCを採用している代表的なデータベースには以下があります。

  • PostgreSQL(完全なMVCC実装)
  • MySQL / InnoDB(スナップショット分離を実装)
  • Oracle Database
  • CockroachDB・YugabyteDBなど分散DBも採用

MVCCの利点はリードとライトが互いをブロックしないことによる高い並列性ですが、古いバージョンのデータを保持するためストレージ消費が増加し、不要バージョンを定期的に削除するバキューム処理(PostgreSQLのVACUUMなど)が必要になります。Webアプリケーションや高負荷な本番環境において、応答速度と一貫性を両立するための重要な基盤技術です。

使い方・例文

MVCCを使うデータベースでは、あるユーザーが長い集計クエリを実行している間に別のユーザーがデータを更新しても、集計クエリは開始時点のデータを読み続けるため整合性が保たれます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語