データベースの基礎

トランザクションの排他制御で使われる2相ロック方式の説明として、正しいものはどれか。

  1. A各トランザクションは、ロックをかける段階と解除する段階を何度繰り返してもよい。これにより、デッドロックが起きないことが保証される
  2. B読み出しにはロックをかけず、書き込みにだけロックをかける。これにより、ダーティリードを含むすべての問題が防げる
  3. C各トランザクションは、ロックを1つでも解除したら、それ以降は新たなロックをかけない。これにより、同時に実行しても直列に実行した場合と同じ結果になることが保証されるが、デッドロックは起こりうる
答えと解説を見る

正解:C. 各トランザクションは、ロックを1つでも解除したら、それ以降は新たなロックをかけない。これにより、同時に実行しても直列に実行した場合と同じ結果になることが保証されるが、デッドロックは起こりうる

2相ロック方式(2PL)では、各トランザクションが、必要なロックを次々にかけていく段階(成長相)と、ロックを解除していく段階(縮退相)の2つの段階を持ち、いったんロックを解除し始めたら、新たなロックはかけません。すべてのトランザクションがこの規則を守ると、同時に実行したときの結果が、トランザクションをある順番で1つずつ実行した場合と同じになること(直列化可能性)が保証されます。ただし、2つのトランザクションが互いに相手のロックの解除を待つデッドロックは防げないので、DBMSはデッドロックを検出して一方をロールバックするなどの対処をします。実際には、コミットするまで専有ロックを解除しない厳格な2相ロック方式がよく使われ、ほかのトランザクションがコミットされていないデータを読むことも防ぎます。

  • A. ロックをかける段階と解除する段階を繰り返すのは2相ロック方式ではありません。また、2相ロック方式でもデッドロックは起こりえます。
  • B. 読み出しにロックをかけないと、ほかのトランザクションが更新している途中のデータを読めてしまい、ダーティリードなどを防げません。
  • C. 正しい。解除を始めたら新たなロックをかけないことで直列化可能性が保証されますが、デッドロックは起こりえます。
この分野を解く 分野ページへ

関連する計算ツール

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データベースの基礎のほかの問題

  1. トランザクションT1は行Aに専有ロックをかけたあと行Bのロックを要求し、T2は行Bに専有ロックをかけたあと行Aのロックを要求したため、どちらも先へ進めなくなった。DBMSがこの状態を検出したときに行う一般的な対処はどれか。
  2. 多くのDBMSは、データを更新するとき、更新の内容をログ(ジャーナル)に記録し、そのログをデータベース本体より先に不揮発性の記憶装置に書き込む(WAL: ログ先行書き込み)。この方式をとる主な理由はどれか。
  3. トランザクションT1〜T5があり、障害が発生する前にチェックポイントを1回取った。T1はチェックポイントの前に開始してコミットした。T2とT3はチェックポイントの前に開始し、T2はチェックポイントのあと障害の前にコミットし、T3は障害の時点でコミットしていなかった。T4とT5はチェックポイントのあとに開始し、T4は障害の前にコミットし、T5はコミットしていなかった。障害のあとの回復で、ログを使ってロールフォワードする必要があるトランザクションはどれか。
  4. 100万行ある会員表の会員番号の列にB+木のインデックスを作成した。一般に期待できる効果と、その代償の組み合わせとして正しいものはどれか。
  5. 100万行の会員表で、会員番号(すべて異なる)、都道府県(47種類)、性別(2種類でほぼ半々)の列に、それぞれB+木のインデックスを作ることを考える。WHERE句で1つの列の値を指定して検索するとき、インデックスの効果が最も小さいと考えられる列はどれか。