データベースの基礎

トランザクションT1は行Aに専有ロックをかけたあと行Bのロックを要求し、T2は行Bに専有ロックをかけたあと行Aのロックを要求したため、どちらも先へ進めなくなった。DBMSがこの状態を検出したときに行う一般的な対処はどれか。

  1. Aそのまま待たせ続ける。いずれ一方のロックが自然に解除される
  2. B一方のトランザクションをロールバックしてロックを解除させ、もう一方を先に進める
  3. CT1とT2の更新を、両方ともそのままコミットする
答えと解説を見る

正解:B. 一方のトランザクションをロールバックしてロックを解除させ、もう一方を先に進める

2つ以上のトランザクションが、互いに相手の持つロックの解除を待ち合って、どれも先へ進めなくなる状態をデッドロックと呼びます。この状態は待っているだけでは解消しないので、多くのDBMSは、どのトランザクションがどれを待っているかを表す待ちグラフに閉路ができたことなどからデッドロックを検出し、一方(犠牲者)をロールバックしてロックを解除させます。ロールバックされたトランザクションは、あとでやり直します。ロックを待つ時間に上限(タイムアウト)を設けて、超えたらロールバックする方法もあります。予防策としては、すべてのトランザクションが、行Aの次に行Bというように、決まった順番でロックをかけるようにする方法が効果的です。

  • A. 互いに相手を待っているので、待っているだけではロックは解除されません。
  • B. 正しい。一方をロールバックしてロックを解除させるのが一般的な対処です。
  • C. コミットするには必要なロックを得て処理を終える必要があり、待ち合ったままではコミットできません。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

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