排他制御は,複数のトランザクションが同じデータを同時に更新しても矛盾が起きないように,ロックで順番を守らせる仕組みです。 ロックの取り方を誤ると,互いに相手のロックの解放を待って動けなくなるデッドロックが起きます。 午前Ⅰとシステムアーキテクト・ITサービスマネージャの午前Ⅱによく出ます。
なぜ排他制御が要るか
在庫が10個のとき,2つのトランザクションがほぼ同時に在庫を読み(どちらも10),それぞれ1個ずつ引いて書き戻すと, 結果は8ではなく9になります。片方の更新が消えてしまうこの現象を変更消失(lost update)と呼びます。 これを防ぐために,読み書きするデータにロックを掛け,ほかのトランザクションを待たせます。
| すでに掛かっているロック | 共有ロックを掛けられるか | 専有ロックを掛けられるか |
|---|---|---|
| 共有ロック(読むため) | 掛けられる | 掛けられない |
| 専有ロック(書くため) | 掛けられない | 掛けられない |
ロックを掛ける単位(表全体か,行か)をロックの粒度と呼びます。 ある行に共有ロックが掛かっていれば,その行を含む表全体に専有ロックを掛けることはできません。
デッドロック
トランザクション A が資源1をロックして資源2を待ち,B が資源2をロックして資源1を待つと,どちらも永遠に進めなくなります。これがデッドロックです。
- 見つけ方:誰が誰を待っているかを矢印で表した待ちグラフを作り,矢印が輪(閉路)になっていればデッドロックです
- 防ぎ方:全てのトランザクションで資源(レコード)をロックする順番をそろえる。同じ順番で取り合えば,輪ができません
ロックを取る段階と外す段階を分ける2相ロッキングは,同時に動かしても順番に動かしたのと同じ結果を保証しますが,デッドロックは防げません。
ACID 特性
トランザクションが満たすべき4つの性質を,頭文字をとって ACID 特性と呼びます。
| 原子性(Atomicity) | トランザクションの処理は,全てが実行されるか,全てが取り消されるかのどちらか |
|---|---|
| 一貫性(Consistency) | 整合性の取れたデータベースは,トランザクションを実行した後も整合性が取れている |
| 隔離性(Isolation) | 同時に実行しても,互いに影響を与えない |
| 耐久性(Durability) | コミットした結果は,その後に障害が起きても失われない |
隔離性を高く(ロックを厳しく)するほど不整合なデータを読むことは減りますが,待ちが増えて,単位時間に処理できるトランザクションの数も減ります。
試験での問われ方
当サイトが収録している午前の問題のうち,排他制御・ロック・デッドロック・ACID などの語が出てくるのは26問です。 午前Ⅰが4割ほどで,システムアーキテクト・ITサービスマネージャの午前Ⅱがそれに続きます。型ごとに数えると次のとおりです。
- デッドロック(9問)。防ぐ方法(「資源獲得の順序を両方のタスクで同じにする」,2問。 バッチ処理なら「複数レコードを更新するときにロックを掛ける順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する」), 検出に使うデータ構造(待ちグラフ),待ちグラフや処理の表からデッドロックの起きる時点を読み取る問題です。
- 排他制御とロック(8問)。同時更新で矛盾を生じさせないための技法(排他制御),変更消失の具体例, 共有ロックと専有ロックの関係(「X が A 表内の特定行 a に対して共有ロックを獲得しているときは,Y は A 表に対して専有ロックを獲得することができない」), 隔離性の水準を高めたときの影響,2相ロッキングで起こり得る現象(デッドロック),レースコンディションなどです。
- ACID 特性(6問)。原子性の説明(「トランザクション内の処理は,全てが実行されるか,全てが取り消されるかのいずれかである」など,4問), 一貫性の説明,ACID 特性に含まれないもの(可用性)です。
- このほか,WAL や並列処理の流れ図の問題(3問)の選択肢に出てきます。
出題された過去問(26問)
リンク先の年度ページで,問題と解説を読めます。
午前Ⅰ(高度試験 共通)(11問)
- 令和6年度 春期 問6三つの資源 X〜Z を占有して処理を行う四つのプロセス A〜D がある。各プロセスは処理の進行に…
- 令和4年度 秋期 問6二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。この…
- 令和4年度 秋期 問10ACID 特性の四つの性質に含まれないものはどれか。
- 平成31年度 春期 問6二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。この…
- 平成31年度 春期 問9トランザクションの ACID 特性のうち,一貫性(consistency)の説明はどれか。
- 平成29年度 春期 問8トランザクション A と B が,共通の資源であるテーブル a と b を表に示すように更新する…
- 平成28年度 春期 問3流れ図に示す処理の動作の記述として,適切なものはどれか。ここで,二重線は並列処理の同期を表す。
- 平成27年度 春期 問9DBMS に実装すべき原子性(atomicity)を説明したものはどれか。
- 平成26年度 春期 問10トランザクションの原子性(atomicity)の説明として,適切なものはどれか。
- 平成25年度 春期 問3流れ図に示す処理の動作の記述として,適切なものはどれか。ここで,二重線は並列処理の同期を表す。
- 平成24年度 春期 問10トランザクションが,データベースに対する更新処理を完全に行うか,全く処理しなかったかのように取り…
ITサービスマネージャ 午前Ⅱ(6問)
- 令和7年度 春期 問23DBMS において,複数のトランザクション処理プログラムが同一データベースを同時に更新する場合,…
- 令和5年度 春期 問232相ロッキングプロトコルに従うトランザクションで発生する可能性のある現象はどれか。
- 令和元年度 秋期 問21トランザクション T1,T2 の同時実行制御が適切に行われない場合に起こり得る,レコード X,Y…
- 平成29年度 秋期 問21WAL(Write Ahead Log)プロトコルの目的に関する記述のうち,適切なものはどれか。
- 平成27年度 秋期 問20システムの信頼性評価項目である RASIS のうち,Integrity(完全性)を高める方法を説…
- 平成26年度 秋期 問21トランザクション A~D に関する待ちグラフのうち,デッドロックが発生しているものはどれか。ここ…
システムアーキテクト 午前Ⅱ(5問)
- 令和7年度 春期 問24トランザクションの隔離性水準を高めたとき,不整合なデータを読み込むトランザクション数と,単位時間…
- 令和6年度 春期 問24DBMS において,デッドロックを検出するために使われるデータ構造はどれか。
- 令和4年度 春期 問24t1~t10 の時刻でスケジュールされたトランザクション T1~T4 がある。時刻 t10 で …
- 平成25年度 秋期 問22DBMS に実装すべき原子性(atomicity)を説明したものはどれか。
- 平成24年度 秋期 問22RDBMS のロックに関する記述のうち,適切なものはどれか。ここで,X,Y はトランザクションと…
情報処理安全確保支援士 午前Ⅱ(3問)
- 令和3年度 春期 問21複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計…
- 平成26年度 秋期 問21トランザクション A〜D に関する待ちグラフのうち,デッドロックが発生しているものはどれか。ここ…
- 平成21年度 春期 問17DBMS の排他制御機能に関する記述のうち,適切なものはどれか。
ITストラテジスト 午前Ⅱ(1問)
- 令和7年度 春期 問23プログラムの排他制御の不備によって,プロセスやスレッドが共有リソースに同時アクセスした場合に想定…