令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13

2相ロック方式を用いたトランザクションの同時実行制御に関する記述のうち,適切なものはどれか。

解答・解説

正解: エ. トランザクションは,必要な全てのロックを獲得した後にだけ,ロックを解除できる。

2相ロック方式は、データベースのトランザクション処理において、複数のトランザクションを同時実行する際の直列可能性(シリアライザビリティ)を保証するための同時実行制御方式です。

2相ロック方式では、各トランザクションのロック操作が以下の2つのフェーズ(相)に明確に分かれています。

  1. 成長相(第1相):対象データに対するロックを獲得していくフェーズ。このフェーズ中はロックを解除することはできません。
  2. 縮退相(第2相):獲得したロックを順次解除していくフェーズ。一度でもロックを解除すると、その後は新たなロックを獲得することはできません。

つまり、一度でもロックを解除すると新たなロックを獲得できないため、トランザクションは「必要な全てのロックを獲得した後にだけ、ロックの解除を始めることができる」ことになります。よって、エ が正解です。

各選択肢の解説

  • ア:2相ロック方式では、複数のトランザクションが互いに相手のロック解除を待ち合う状態(例:トランザクションAがBのロック解除を待ち、トランザクションBがAのロック解除を待つ)に陥る可能性があり、デッドロックが発生することがあります。
  • イ:トランザクション開始の時刻順となるように制御される方式は、タイムスタンプオーダリング方式です。2相ロック方式では必ずしも開始時刻順にコミットされるとは限りません。
  • ウ:一般的に、データベースの一貫性を保つため、トランザクションはコミットまたはアボートが確定した時点で(あるいはその後に)獲得したロックを解除します(厳密な2相ロック方式など)。「全て解除した後にだけコミット操作を実行できる」という記述は誤りです。
  • エ:正解です。2相ロック方式の原則通り、トランザクションは必要な全てのロックを獲得し終える(成長相を終える)まで、ロックを解除(縮退相へ移行)することはできません。

Spineチーム