令和4年度 データベーススペシャリスト 午前Ⅱ 問5 2相ロックプロトコル

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

令和4年度 データベーススペシャリスト 午前Ⅱ 問5 2相ロックプロトコル

本問はデータベースの並行制御における2相ロックの性質を問う。解法の核は、デッドロックの可能性と直列可能性の保証を区別することにある。

【問題】

2相ロックプロトコルに関する記述のうち、適切なものはどれか。

ア アンロック(ロック解除)のフェーズでも、必要に応じて新規のロックを獲得できる。 イ 直列可能(シリアライザブル)なスケジュールになることが保証される。 ウ デッドロックが発生しないことが保証される。 エ 任意のトランザクション間で、ロックの順序を固定化するものである。

【解説】

2相ロックプロトコル(2-Phase Locking: 2PL)は、データベースの並行制御において、トランザクションの直列可能性を保証するためのプロトコルです。

このプロトコルでは、各トランザクションにおけるロックおよびアンロックの操作を、以下の2つのフェーズ(相)に明確に分離します。

  1. 成長相(Growing Phase): 必要なロック(共有ロック・専有ロック)を順次獲得していくフェーズ。このフェーズでは、ロックの獲得のみが行われ、一切のアンロック(解除)を行うことはできません。

  2. 収縮相(Shrinking Phase): 獲得したロックを順次解除していくフェーズ。一度でもロックを解除(アンロック)すると、そのトランザクションは収縮相に移行し、以後、新たなロックを獲得することは一切禁止されます。

stateDiagram-v2
    [*] --> Growing_Phase : Transaction_Start
    Growing_Phase --> Growing_Phase : Lock_Acquisition
    Growing_Phase --> Shrinking_Phase : First_Unlock
    Shrinking_Phase --> Shrinking_Phase : Lock_Release
    Shrinking_Phase --> [*] : Transaction_End

理論的帰結

2相ロックプロトコルに従うスケジュールは、数学的に直列可能(シリアライザブル)であることが証明されています。直列可能とは、並行して実行した結果が、ある順序で1つずつ順次に(直列に)実行した場合の結果と等しくなる性質を指し、データの整合性を保つために不可欠な要素です。

しかし、2PLはデッドロックの発生を防止することはできません。例えば、トランザクションAが資源Xをロックし、トランザクションBが資源Yをロックした状態で、互いに相手の資源をロックしようとすると、どちらも成長相を抜け出せずデッドロックに陥ります。

【選択肢の吟味】

選択肢 判定 解説
× 収縮相(ロック解除を行うフェーズ)に移行した後は、いかなる場合も新規のロックを獲得することはできません。
2相ロックプロトコルを遵守することで、スケジュールが必ず直列可能(シリアライザブル)になることが保証されます。
× 2PLはデッドロックを防止しません。デッドロックの防止には、静的ロックや資源の順序付けなど別の対策が必要です。
× ロックの獲得順序を固定化するルールは含まれていません。順序の固定化は、デッドロックを予防するための別の手法です。

【ポイント】

  • 直列可能性の保証:2相ロックプロトコル(2PL)の最大の目的であり、遵守すれば必ず直列可能なスケジュールとなる。

  • デッドロックは未解決:2PLを採用してもデッドロックは発生するため、別途「待機グラフ」などを用いた検出と解消が必要。

  • 2つのフェーズ(相):ロック獲得のみの「成長相」と、ロック解除のみの「収縮相」に分かれ、逆戻りはできない。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました