排他制御の役割は?更新中データの参照で矛盾を防ぐ仕組み
情報セキュリティマネジメント試験 平成31年度春期 午前 問45 / データベース › トランザクション処理
過去問にチャレンジ
トランザクションが更新中のデータを、トランザクションが参照しようとしたとき、更新と参照の処理結果を矛盾させないようにするためのDBMSの機能はどれか。
- ア
最適化
- イ
参照制約
- ウ
排他制御
- エ
副問合せ
会話形式の解説
講師今回はデータベースの問題です。一つのデータを、二つのトランザクション(ひとまとまりの処理)が同時に扱う場面に注目してください。片方が更新している途中で、もう片方が読もうとしています。
受験者同時に動いているのが問題なんですね。ただ、選択肢に「参照制約」があって、問題文の「参照しようとした」と言葉が同じなので気になりました。
講師そこは用語の意味を確かめましょう。参照制約は、外部キーの値が参照先の表の主キーに実際に存在することを求める制約です。表と表の関係の整合性を保つためのものです。
受験者つまり、表どうしのつながりを守るルールで、同時に処理が動くことへの対策ではないということですか。
講師そのとおりです。「参照」という語は同じでも、意味は別です。では、同時アクセスによる不整合を防ぐ仕組みはどれだと思いますか。
受験者排他制御だと思います。言葉からすると、ほかの処理を排除するような印象があります。
講師正解です。DBMSは、更新する対象のデータにロック、つまり鍵をかけて、ほかのトランザクションからの更新や読出しを制限します。こうして更新と参照のぶつかり合いを調整し、処理結果の矛盾を防ぎます。
受験者もし排他制御がなかったら、T2は更新途中の値を読んでしまうわけですね。
講師はい。確定していない値や誤った値を参照してしまうおそれがあります。残りの選択肢も確認しておきましょう。最適化は、問合せをどんな手順で実行すれば効率がよいかを決める機能で、目的は処理速度です。
受験者副問合せはSQLの書き方の一つでしたよね。問合せの中に別の問合せを入れ子にするものだったと思います。
講師そうです。検索条件を組み立てるための記述方法なので、トランザクション同士の競合を制御する機能ではありません。
受験者整理すると、同時アクセスの調整は排他制御、表どうしの整合性は参照制約、効率化は最適化、入れ子の書き方は副問合せ、ということですね。
講師よくまとまっています。補足すると、コミット(確定)されていない更新内容を別のトランザクションが読んでしまう現象をダーティリードといい、排他制御で防ぐべき典型例です。また、ロックには読出しどうしは許す共有ロックと、ほかからの読み書きをすべて止める専有ロックがあります。この違いもあわせて覚えておくと、関連する問題に対応しやすくなります。
まとめ
複数のトランザクションが同じデータに同時にアクセスするとき、更新と参照の結果が矛盾しないようにするDBMSの機能は排他制御です。DBMSは更新対象のデータにロックをかけ、ほかのトランザクションからの更新や読出しを制限します。参照制約は外部キーによる表どうしの整合性を保つもので、最適化は問合せの効率化、副問合せはSQLの入れ子の記述方法です。関連して、未確定の更新を読むダーティリードや、共有ロックと専有ロックの違いも押さえておくと役立ちます。
解答・解説
正解はウです
この問題のテーマ
複数のトランザクションが同じデータに同時にアクセスするとき、更新と参照の結果が矛盾しないようにするDBMSの機能を問う問題です。データベースの同時実行制御に関する基本用語の理解を確かめています。
解き方の考え方
まず問題文の状況を確認します。T1が更新している途中のデータをT2が読もうとしている、つまり複数の処理が同時に同じデータを扱っている場面です。このときに必要なのは、処理が同時に進むことによる不整合を防ぐ仕組みです。各選択肢の用語が何を目的とする機能なのかを確かめ、同時アクセスの調整を目的とするものを選べば答えにたどり着けます。
選択肢ごとの解説
- ×ア 最適化最適化は、問合せをどのような手順で実行すれば効率がよいかを決める機能です。処理速度を上げることが目的で、同時に動くトランザクション同士の整合性を保証するものではありません。
- ×イ 参照制約参照制約は、外部キーの値が参照先の表の主キーに実際に存在することを求める制約です。表と表の関係の整合性を保つためのもので、同時実行の制御とは目的が違います。名前に「参照」が入っていますが、問題文の「参照しようとした」とは別の意味なので注意が必要です。
- ○ウ 排他制御排他制御は、同時アクセスによるデータの不整合を防ぐ仕組みです。DBMSは、更新する対象のデータにロックをかけ、ほかのトランザクションからの更新や読出しを制限します。こうして更新と参照のぶつかり合いを調整し、処理結果の矛盾を防ぎます。
- ×エ 副問合せ副問合せは、SQLの問合せ文の中に別の問合せを入れ子にして書く記述方法です。検索条件を組み立てるための書き方なので、トランザクション同士の競合を制御する機能ではありません。
補足
コミットされていない更新内容を別のトランザクションが読んでしまう現象はダーティリードと呼ばれ、排他制御で防ぐべき典型例です。ロックには、読出しどうしは許す共有ロックと、ほかからの読み書きをすべて止める専有ロックがあります。この違いもあわせて覚えておくと、関連する問題に対応しやすくなります。
POINT
- 排他制御は、複数のトランザクションが同時に同じデータにアクセスしたときの不整合を防ぐ仕組みです。
- DBMSは主にロックを使って排他制御を行い、更新中のデータに対するほかの更新や読出しを制限します。
- 更新中のデータをほかの処理が読むと、確定していない値や誤った値を参照してしまうおそれがあります。
- 参照制約は表と表の間の整合性を保つためのもので、同時実行の制御とは別物です。
