並行制御(2PL・MVCC)とは?複数の処理が同時にデータをいじっても正しく動くようにするしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

並行制御とは(全体像)

並行制御は、何人もが同時に同じデータを読み書きしても、結果がおかしくならないように調整するしくみだよー。

身近にたとえると、1冊の共有ノートを何人かで同時に編集する感じ。同じページを2人が一度に書き換えると、内容が壊れちゃう。それを防ぐのが並行制御なのー。

押さえるのは、2PL(鍵で守る慎重派)とMVCC(コピーを持つ楽観派)の違いと、デッドロックの対処だよー。


詳しく:2PLとMVCCの違いとデッドロックだけ覚えれば戦える

ここが記事の心臓部。まず2つの考え方を見ていこーね。

2PLとMVCC

方式考え方代表
2PL(悲観的)鍵(ロック)を取ってから使い、終わったら返すMySQL InnoDB
MVCC(楽観的)コピー(バージョン)を持ち、読みと書きをぶつけないPostgreSQL・Oracle

2PLは、使う前に鍵(ロック)をかけて、他の人を待たせる慎重なやり方MVCCは、データのコピー(バージョン)を持つことで、読んでいる人と書いている人がぶつからないようにするやり方だよー。

ここで一番のひっかけが「MVCCはロックがまったく要らない」という誤解。読み書きはぶつけずに済むけれど、書き込みどうしがぶつかるときはロックが必要。完全にロックなし、ではないよー。

もう1つの要点がデッドロック

デッドロック

項目内容
何が起きるおたがいが相手の鍵を待ち、永遠に止まる
対処検出して、片方を強制終了(犠牲者)して解く

デッドロックは、AさんとBさんが「あなたの鍵を待つ」「いやあなたの鍵を待つ」と譲り合って、両方止まってしまう状態。データベースはこれを検出して、片方を強制終了して解決するのー。

なお、ここで2つめのひっかけが「2PLは必ずデッドロックになる」という思い込み。設計しだいで避けられるので、必ず起きるわけではないよー。

わかりやすく言い換えると

要するに、共有ノートの編集でイメージするとラクだよー。

2PL … 書く前に「このページ使用中」の鍵をかける(慎重派)

MVCC … ページのコピーを配って、読む人と書く人がぶつからないようにする(楽観派)

デッドロック … 2人が「お先にどうぞ」と譲り合って、両方止まってしまう

つまり、「2PLは鍵・MVCCはコピー」「デッドロックは検出して片方を止める」、この2点が試験の急所なのー。


試験のツボ

🔴 一番出る:2PLとMVCCの違い

①2PLは鍵(ロック)を取ってから使う悲観的なやり方(MySQL InnoDB)

②MVCCはコピー(バージョン)を持ち読み書きをぶつけない楽観的なやり方(PostgreSQL・Oracle)

🔴 次に出る:MVCCの注意点

①読みと書きはぶつけずに済む

②書き込みどうしがぶつかるときはロックが必要(完全にロックなしではない)

🟡 押さえると安定:デッドロック

①おたがいが相手の鍵を待ち、両方が永遠に止まる状態

②検出して片方を強制終了(犠牲者)して解決する


よくある間違い

「MVCCはロックがまったく要らない」→ ✗  読み書きはぶつけずに済むが、書き込みどうしの競合ではロックが必要。

「2PLは必ずデッドロックになる」→ ✗  設計しだいで避けられる。必ず起きるわけではない。

「並行制御は同時に動く処理を1つに減らすことである」→ ✗  同時に動かしたまま、結果がおかしくならないように調整するしくみ。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(2PLとMVCC)

📝 オリジナル問題 1 2PLとMVCCの違い

2PLとMVCCに関する次の記述のうち、正しいものはどれか。

  1. 2PLもMVCCも画面の明るさをこまかく決めるための設定のことだとされているものである
  2. 2PLとMVCCはまったく同じしくみで、考え方にもいっさい違いはないものだとされているものだ
  3. 2PLは鍵(ロック)を取ってから使い、MVCCはコピー(バージョン)でぶつけない方式である
  4. 2PLはデータを必ず暗号化する命令で、MVCCは削除する命令だとされているものである
データスラ
データスラ 解答・解説

解答は 3 だよー。

2PLは鍵(ロック)を取ってから使うやり方、MVCCはコピー(バージョン)を持って読み書きをぶつけないやり方なのー。慎重派の2PL、楽観派のMVCC、というイメージだよー。

選択肢1の「明るさの設定」、選択肢2の「まったく同じ」、選択肢4の「暗号化・削除」はどれも誤りなのー。

選択肢判定理由
1明るさの設定ではない
2考え方が違う
32PLは鍵・MVCCはコピー
4暗号化や削除の命令ではない

オリジナル問題2(MVCCの注意点)

📝 オリジナル問題 2 MVCCの注意点

MVCCに関する次の記述のうち、正しいものはどれか。

  1. MVCCは画面に複数の窓を表示するための機能のことだとされているものである
  2. MVCCはどんなときもロックがいっさい要らず、書き込み競合でも不要なものだとされている
  3. MVCCはデータを必ず削除するための命令のことだとされているものである
  4. MVCCは読み書きをぶつけずに済むが、書き込みどうしの競合ではロックが必要である
データスラ
データスラ 解答・解説

解答は 4 だよー。

MVCCは読みと書きをぶつけずに済むけれど、書き込みどうしがぶつかるときはロックが必要なのー。完全にロックなし、ではないんだよー。

選択肢1の「複数の窓」、選択肢2の「いっさい要らない」、選択肢3の「削除する命令」はどれも誤りなのー。

選択肢判定理由
1窓を表示する機能ではない
2書き込み競合ではロックが要る
3削除する命令ではない
4読み書きはぶつけず・書込競合は必要

オリジナル問題3(デッドロック)

📝 オリジナル問題 3 デッドロック

デッドロックに関する次の記述のうち、正しいものはどれか。

  1. デッドロックはおたがいが相手の鍵を待って両方が止まる状態で、検出して片方を強制終了する
  2. デッドロックは処理がいつもよりずっと速くなる便利な状態のことだとされているものなのである
  3. デッドロックは画面が必ず暗くなってしまう困った現象のことだとされているものである
  4. デッドロックはデータを必ず暗号化して隠すための命令のことだとされているものである
データスラ
データスラ 解答・解説

解答は 1 だよー。

デッドロックは、おたがいが相手の鍵を待って、両方が永遠に止まってしまう状態なのー。データベースはこれを検出して、片方を強制終了(犠牲者)して解くんだよー。

選択肢2の「速くなる」、選択肢3の「画面が暗くなる」、選択肢4の「暗号化する命令」はどれも誤りなのー。

選択肢判定理由
1相手の鍵待ちで止まる・検出して解く
2速くならず止まる
3画面が暗くなる現象ではない
4暗号化の命令ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る