同時実行制御とは(全体像)
同時実行制御とは、複数の処理(トランザクション)を同時に動かしても、データが矛盾(不整合)しないようにするしくみのことだ。
たとえば、2人が同時に同じデータを書きかえようとすると、おかしなことになる。それを防ぐのが、ロックだ。データを使う間、他の処理が勝手にいじれないように、鍵をかけるイメージ。
ロックには、2種類ある。
- 共有ロック(読み取り用) … 複数で、同時にかけられる(みんなで読むのはOK)
- 排他ロック(書き込み用) … 1つだけ(書きかえる間は、他はかけられない)
図書館の本でたとえると分かりやすい。読むだけ(共有ロック)なら、何人でも同時に見られる。でも、書きこむ(排他ロック)なら、一人だけ。
ここで一番のポイント。ロックは、すべてが排他(単独)なわけではない。「ロックは、いつも1つだけしかかけられない」と思い込むと誤りで、共有ロックは複数で同時にかけられる。
詳しく:デッドロック
ここが心臓部。ポイントを表で押さえよう。
同時実行制御のポイント
| 項目 | やさしい意味 |
|---|---|
| 共有ロック | 読み取り用。複数で同時にかけられる |
| 排他ロック | 書き込み用。1つだけ(単独) |
| デッドロック | 互いに相手のロックを待ち合って、両方が止まる |
| 対処 | DBMSが検出して、自動で解除できる |
注意したいのが、デッドロック。これは、2つの処理が、互いに相手のロックを待ち合って、両方とも動けなくなる状態だ。
ここで一番のポイント。デッドロックは、避けられないものではない。「デッドロックが起きたら、もうどうにもならない」と思い込むと誤りで、DBMSがデッドロックを検出して、自動で解除できる(どちらかの処理を取り消すなど)。
わかりやすく言い換えると
身近なたとえで整理しよう。
同時実行制御は、「複数の処理を同時に動かしても、データが矛盾しないようにするしくみ」のイメージ。ロックで、勝手に書きかえられないようにする。
ロックの2種類は、「読むだけの共有ロック(何人でも同時に可)、書きこむ排他ロック(一人だけ)」こと。要するに、読みは共有、書きは独占。
デッドロックは、「互いに相手のロックを待ち合って、両方が止まる状態。DBMSが検出して自動で解除できる」こと。つまり、対処できる。
試験のツボ
🔴 一番出る:ロックの2種類
①共有ロック=読み取り用、複数で同時にかけられる
②排他ロック=書き込み用、1つだけ(単独)
🔴 次に出る:同時実行制御の目的
①複数の処理を同時に動かしても、データが矛盾しないようにする
②ロックで、勝手に書きかえられないようにする
🟡 押さえると安定:デッドロック
①互いに相手のロックを待ち合って、両方が止まる状態
②DBMSが検出して、自動で解除できる(対処できる)
よくある間違い
①「ロックは、いつも1つだけしかかけられない(すべて排他)」→ ✗ 共有ロック(読み取り用)は、複数で同時にかけられる。
②「デッドロックが起きたら、もうどうにもならない」→ ✗ DBMSがデッドロックを検出して、自動で解除できる。
③「同時実行制御は、処理を1つずつしか動かせなくするものだ」→ ✗ 複数の処理を同時に動かしても、データが矛盾しないようにするしくみ。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(同時実行制御の正体)
同時実行制御に関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- 複数の処理を同時に動かしても、データが矛盾しないようにする
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
解答は 2 です。
同時実行制御は、複数の処理を同時に動かしても、データが矛盾しないようにするしくみなのです。ロックで勝手に書きかえられないようにするなります。
選択肢1は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✓ | 同時でもデータが矛盾しないようにするで正しい |
| 3 | ✗ | 請求書の事務の話 |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(ロックの種類)
ロックの種類に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、ロックがかかるとされているものだ
- 取引先への請求書の枚数しだいで、ロックが決まるとされているのだ
- ロックは、いつも1つだけしかかけられないものなのである
- 共有ロックは読み取り用で複数可、排他ロックは書き込み用で単独
解答は 4 です。
ロックは、共有ロックは読み取り用で複数可、排他ロックは書き込み用で単独なのです。読むだけなら何人でも、書きこむなら一人だけなります。
選択肢1の給与、選択肢2の請求書、選択肢3の「いつも1つだけ」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算でかかるのではない |
| 2 | ✗ | 請求書の枚数で決まるのではない |
| 3 | ✗ | 共有ロックは複数可 |
| 4 | ✓ | 共有=読み複数可・排他=書き単独で正しい |
オリジナル問題3(デッドロック)
デッドロックに関する次の記述のうち、最も適切なものはどれか。
- 互いに相手のロックを待ち合って止まるが、DBMSが解除できる
- 社員の給与を計算するときだけ、起こるとされているものである
- 取引先へ請求書を郵送するときだけ、起こるとされているのである
- 一度起きたら、もうどうにもならないものだとされているのである
解答は 1 です。
デッドロックは、互いに相手のロックを待ち合って止まるが、DBMSが解除できるのです。検出して自動で解除できるので、対処できるなります。
選択肢2の給与、選択肢3の請求書、選択肢4の「どうにもならない」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 待ち合って止まるがDBMSが解除できるで正しい |
| 2 | ✗ | 給与計算で起こるのではない |
| 3 | ✗ | 請求書のときだけではない |
| 4 | ✗ | DBMSが検出・解除できる |
まとめ
押さえどころ
- 🔴 同時実行制御 = 複数の処理(トランザクション)を同時に動かしても、データが矛盾しないようにするしくみ。
- 🔴 ロックの2種類 = 共有ロック(読み取り用・複数で同時に可)、排他ロック(書き込み用・1つだけ)。
- 🟡 デッドロック = 互いに相手のロックを待ち合って、両方が止まる状態。DBMSが検出して自動で解除できる。
次に学ぶ
- トランザクション・ACID ── ひとまとまりの処理の単位。同時実行制御は、その独立性(I)を支える。
- スレッド・並行制御 ── 並行処理の制御。デッドロックや排他制御の考え方が共通する。
執筆: SikakuQuest編集部