トランザクション・排他制御・分離レベル 重要度:★★出題: AM2・PM1・PM2
MVCC(多版同時実行制御)とスナップショット分離
たばんどうじじっこうせいぎょとすなっぷしょっとぶんり / Multi-Version Concurrency Control (MVCC)
更新前の古いバージョンの行データ(版)を保持することで、読取り処理が書込み処理をブロックせず、書込み処理も読取り処理をブロックしない同時実行制御方式。
3行速習ポイント
- 更新トランザクションが対象行に専有ロックを掛けていても、参照トランザクションは更新前のバージョン(スナップショット)をロック待ちなしで読み取れる
- 「読取りは書込みをブロックせず、書込みは読取りをブロックしない」ため、参照系と更新系が混在するOLTPシステムで高いスループットを発揮する
- ただし不要になった古いバージョン(デッドタプルやUNDOセグメント)の回収(VACUUMやガベージコレクション)や、書込みスキュー(Write Skew)への配慮が必要
図解
図2相ロッキング方式とMVCC(多版同時実行制御)の比較
ロッキング方式(共有・専有ロック)午後試験の標準仕様
更新中(専有ロック保持中)の行に対するSELECT(共有ロック要求)はコミットまでロック待ちとなる
MVCC(多版同時実行制御)読取り非ブロック
更新中の行に対しても更新前スナップショット(旧版)を参照するためロック待ちなしで即時応答
概要と本質
Oracle、PostgreSQL、MySQL(InnoDB)など主要な現代RDBMSが採用している同時実行制御方式です。ただしIPAの午後試験では、問題文の冒頭またはRDBMS仕様欄に「SELECT文は共有ロックを掛け、UPDATE/INSERT/DELETE文は専有ロックを掛ける(ロッキング方式)」と明記されている場合が多いため、必ず問題文で与えられたRDBMSのロック仕様に従って解答する必要があります。
重要ポイント・コア概念
- MVCC下でのREAD COMMITTED:各SQL文の実行開始時点の最新コミット済みスナップショットを読み取る
- MVCC下でのSnapshot Isolation(REPEATABLE READ相当):トランザクション開始時点のスナップショットを一貫して読み取る
- 午後試験の鉄則:問題文に「参照時は共有ロックを取得する」と書かれていたら、MVCCの知識ではなく問題文の共有ロック/専有ロック両立表に従ってロック待ちを判定すること
午後I・午後II記述試験での攻略ポイント
午前IIではMVCCの特徴(古い版を保持してロック競合を回避する、タイムスタンプ順序制御等)が問われます。午後試験では必ず問題文中の「使用するRDBMSの仕様」を読み、共有ロックを使うロッキング方式か版管理方式かを確認する癖をつけてください。
午後記述で使える加点キーワード(クリックでコピー)
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着データベーススペシャリスト 過去問演習で実践力を鍛える