基本情報技術者 2012年 春期 午前(科目A) 問33
問題文
DBMSの排他制御に関する記述のうち、適切なものはどれか。
選択肢
ア:アクセス頻度の高いデータの処理速度を上げるためには、排他制御が必要である。
イ:処理速度を上げるため、排他制御を行うデータの範囲は極力大きくすべきである。
ウ:データアクセス時のデッドロックを防止するために、排他制御が必要である。
エ:複数の人が同時に更新する可能性のあるデータには、排他制御が必要である。(正解)
🔒 解説は解答すると表示されます
DBMSの排他制御【午前解説】
正解の理由
正解: エ
複数の人(またはプロセス)が同時に更新する可能性があるデータは、書込みの競合が発生するとロストアップデートや不整合が起きます。排他制御(排他ロックやトランザクションの分離性確保)により、更新操作を直列化して一貫性を維持できるため、エが適切です。
複数の人(またはプロセス)が同時に更新する可能性があるデータは、書込みの競合が発生するとロストアップデートや不整合が起きます。排他制御(排他ロックやトランザクションの分離性確保)により、更新操作を直列化して一貫性を維持できるため、エが適切です。
解法ステップ
- 問題文のキー語(排他制御、同時更新、デッドロック、処理速度)に注目します。
- 各選択肢が「排他制御の目的」に合致しているかを検証します(整合性維持が本質)。
- 誤りの選択肢は誤った前提(例:排他制御=速度向上、広範囲ロックが良い)を含むかを確認します。
- もっとも直接的に排他制御の必要性を述べている選択肢を選びます(エ)。
選択肢別の誤答解説
- ア: 「アクセス頻度の高いデータの処理速度を上げるため」
排他制御は整合性を守るための機能であり、処理速度向上が目的ではありません。頻繁に読み書きされるデータではむしろ過度のロックが性能を悪化させます。よって誤りです。 - イ: 「処理速度を上げるため、排他制御を行うデータの範囲は極力大きくすべき」
ロック範囲(粒度)は小さいほど並行性が高く性能が良くなることが多く、範囲を大きくするのは逆効果となるため誤りです。 - ウ: 「データアクセス時のデッドロックを防止するために、排他制御が必要」
排他制御(ロック)はデッドロックの原因にもなり、デッドロック防止には死锁回避アルゴリズムやロック順序の統一、タイムアウト等が必要です。したがってこの因果は誤りです。 - エ: 「複数の人が同時に更新する可能性のあるデータには、排他制御が必要」
同時更新によるロストアップデートや不整合を防ぐために排他制御が必要であり、これが正解です。
よくある誤解
- 排他制御=常に性能低下:必要以上に広い範囲や長時間ロックすると性能が落ちますが、適切な粒度や楽観的制御で高並行度を維持できます。
- 排他制御はデッドロックを自動的に防ぐ:むしろロックによってデッドロックが発生するので、回避策やタイムアウトが必要です。
- アクセス頻度が高い=常に排他制御が必要:読み取りが多数で更新が少ないなら共有ロックやスナップショット分離で処理する方が効率的です。
補足コラム
- ロックの種類と粒度:共有ロック(読取り)と排他ロック(書込み)、行ロック/ページロック/テーブルロックの粒度選択が性能に影響します。
- 悲観的ロック vs 楽観的ロック:更新競合が多い場面では悲観的(即ロック)、競合が稀なら楽観的(検証時に衝突検出)が有効です。
- トランザクション分離レベル:READ UNCOMMITTED~SERIALIZABLEまであり、分離レベルを上げるほど一貫性は高まるが並行性は低下します。
- デッドロック対策:ロック順序の統一、タイムアウト、デッドロック検出と回復(トランザクションのロールバック)などが用いられます。
FAQ
Q1: 排他制御はすべての更新に必須ですか?
A1: 更新の種類やアプリケーション要件次第です。複数同時更新の可能性がある箇所では必須ですが、読み取り専用や衝突が起きない設計なら緩和できます。
A1: 更新の種類やアプリケーション要件次第です。複数同時更新の可能性がある箇所では必須ですが、読み取り専用や衝突が起きない設計なら緩和できます。
Q2: ロックを小さくすれば常に速度が上がりますか?
A2: 原則として並行性は向上しますが、ロック管理のオーバーヘッドや一貫性要件によって最適点は変わります。
A2: 原則として並行性は向上しますが、ロック管理のオーバーヘッドや一貫性要件によって最適点は変わります。
Q3: 楽観的ロックとは何ですか?
A3: 更新時に衝突検出を行い、衝突があれば再試行する方式で、競合が少ない環境で有効です。
A3: 更新時に衝突検出を行い、衝突があれば再試行する方式で、競合が少ない環境で有効です。
関連キーワード: 排他制御、排他ロック、共有ロック、ロック粒度、悲観的ロック、楽観的ロック、デッドロック、トランザクション、直列化、ロストアップデート

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

