データベースの基礎

トランザクションT1が、ある行に共有ロックをかけて読み出している。この行に対して、T2が共有ロックを、T3が専有ロック(排他ロック)を要求した。T1がロックを解除するまでの間について、正しいものはどれか。

  1. AT2はすぐにロックを得られるが、T3は待たされる
  2. BT2もT3も待たされる
  3. CT2もT3もすぐにロックを得られる
答えと解説を見る

正解:A. T2はすぐにロックを得られるが、T3は待たされる

共有ロックは、データを読み出すときにかけるロックで、ほかのトランザクションも同じデータに共有ロックをかけて同時に読み出せますが、書き込みのための専有ロックはかけられません。専有ロック(排他ロック)は、データを更新するときにかけるロックで、かかっている間は、ほかのトランザクションは共有ロックも専有ロックもかけられません。この例では、T1の共有ロックとT2の共有ロックは両立するので、T2はすぐにロックを得て読み出せます。T3の専有ロックはT1の共有ロックと両立しないので、T1がロックを解除するまで待たされます(T2も共有ロックを持っていれば、T2の解除も待ちます)。このようにロックを使って、同時に実行されるトランザクションどうしの干渉を防ぐことを排他制御と呼びます。

  • A. 正しい。共有ロックどうしは両立し、専有ロックは共有ロックと両立しません。
  • B. 共有ロックどうしは両立するので、T2は待たされません。
  • C. 専有ロックは共有ロックと両立しないので、T3は待たされます。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

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