同時実行制御は『正しさ (直列化可能性)』と『性能 (並列性)』のトレードオフ。ロック方式と MVCC の使い分けが問われます。
ロック は資源への排他制御ですね。
共有ロック (S, 読み) と専有ロック (X, 書き) があって、S は複数取れるけれど X は単独です。
2相ロック って何のこと?
Two-Phase Locking。
トランザクション中で『成長相 (ロック取得)』と『縮退相 (解放)』を分けることで、直列化可能性を保証する方式よ。
MVCC って何が嬉しいんですかぁ?
Multi-Version Concurrency Control、多版型同時実行制御のことです。
読み取り時にロックを取らず、各トランザクションに『そのトランザクション開始時のスナップショット』を見せる方式ですね。
読みと書きが衝突しないので並列性が高く、PostgreSQL・Oracle・MySQL InnoDB などで採用されています。
AP では『MVCC とロックベース方式の違い』や『デッドロックの回避方法』がよく問われるわよ。
確認クイズ
MVCC (多版型同時実行制御) がロックベース方式と比較して持つ主な利点はどれか。
- 更新トランザクションが互いに完全に直列化されるため、性能が高い
- 読み取りトランザクションがロック待ちにならず、並列性が高い
- ディスク I/O が大幅に削減される
- デッドロックが理論上発生しない
こたえを見る
正解: 2. 読み取りトランザクションがロック待ちにならず、並列性が高い
MVCC は読み取りトランザクションが書き込みのロックに影響されないため、並列性が高くなります。書き込み同士はロックや楽観的制御で競合解決します。デッドロックの可能性は MVCC でも残ります。