MVCCとは?エムブイシーシー
MVCCとは、更新のときに古い版を残したまま新しい版を作り、参照するトランザクションには一貫した時点の版を返すことで、読取りと書込みが互いに待たされないようにする同時実行制御方式。多版同時実行制御、追記型の更新方式とも呼ばれる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
ロックだけで正しさを守ると、長時間の集計が更新を止め、更新が集計を止めるという相互の待ちが必ず生じる。読取りが多い業務でこれは致命的なので、「書き換えずに新しい版を足す」ことで、読み手には更新前の姿を見せ続ける方式が生まれた。並行度は上がるが、古い版を保持する領域と、不要になった版を回収する処理が新たに必要になる。物理設計では、この回収の遅れが領域の膨張として現れる。
具体例
PostgreSQLやOracle Database、MySQLのInnoDBはいずれもこの方式を採る。月次売上の集計が受注明細を読んでいる最中に受注確定処理が同じ行を更新しても、集計は開始時点の版を読み続けるので、途中で単価が変わって前半と後半で数字が食い違うことがない。
試験での引っ掛け
2相ロック方式なら書込み中の行を読もうとして待ち、待った末に新しい値を読む。MVCCでは待たずに古い版を読む——この結果の違いが問われる。「MVCCなら待ちが一切起きない」わけではなく、書込みどうしは依然として衝突する。また古い版の回収が滞ると領域が肥大する点も設計上の代償である。
関連用語
出た過去問
出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問18(IPA)
DBMSの多版同時実行制御(MVCC)に関する記述として、適切なものはどれか。
正解:同時実行される二つのトランザクションのうち、先発のトランザクションがデータを更新し、コミットする前に、後発のトランザクションが同じデータを参照すると、更新前の値を返す。
要点:MVCCは版を保持し参照側に更新前の版を返して待ちを避ける
多版同時実行制御は、更新時に古い版を残して新しい版を作り、参照側にはそのトランザクションから見て整合する版を返す方式である。したがって未コミットの更新がある行を他のトランザクションが参照しても、更新前の版が返り、読み手が書き手を待たされない。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問16(IPA)
多版同時実行制御(MVCC)の特徴のうち、適切なものはどれか。
正解:データ書込みに対して新しい版を生成し、同時にデータ読取りが実行されるときの排他制御による待ちを回避する。
要点:MVCCは版を作り分けて読取りを待たせない
多版同時実行制御は、更新の際に元の値を上書きせず新しい版を作り、読取り側には更新前の版を見せる方式である。これにより読取りが書込みのロック解放を待たされず、参照と更新を並行させられる。よってウが正しい。
出典:令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問14(IPA)
トランザクションPが資源Xの値を4から5に更新した後にトランザクションQが開始し、Pがコミットする前にQが資源Xを参照しようとした。Qの挙動のa, bに入れる字…
正解:a: Pがコミット完了するまで待機した後、Xの値5を得る / b: Pのコミット完了を待機することなく、Xの値4を得る
要点:2相ロックは待って新値、MVCCは待たず旧版を読む
単版(シングルバージョン)の2相ロッキングでは、更新側が排他ロックを保持したままなので、読取り側はコミットまで待たされ、解放後は更新後の値を読む。一方MVCCは更新時に旧版を残すため、読取り側はロックを待たずにコミット済みの旧版、すなわち更新前の値を読める。READ COMMITTEDでは未コミットの新値を読むことはないので、待たずに読む場合の値は更新前の4になる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。