平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問19
テクノロジ/データベース二つのトランザクションT1,T2が,データa,bに並行してアクセスする。T1,T2の組合せのうち,直列可能性を保証できるものはどれか。ここで,トランザクションの各操作の意味は次のとおりとする。 LOCK x :データxをロックする READ x :データxを読み込む WRITE x :データxを書き出す UNLOCK x:データxをアンロックする
出典:平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問19
- アT1:READ a → LOCK a → LOCK b → a=a+3 → WRITE a → READ b → b=b+5 → WRITE b → UNLOCK a → UNLOCK b T2:READ a → LOCK a → LOCK b → a=a+3 → WRITE a → READ b → b=b+5 → WRITE b → UNLOCK a → UNLOCK b
- イT1:LOCK a → READ a → a=a+3 → WRITE a → UNLOCK a → LOCK b → READ b → b=b+5 → WRITE b → UNLOCK b T2:LOCK a → READ a → a=a+3 → WRITE a → UNLOCK a → LOCK b → READ b → b=b+5 → WRITE b → UNLOCK b
- ウT1:LOCK a → READ a → a=a+3 → WRITE a → UNLOCK a → LOCK b → READ b → b=b+5 → WRITE b → UNLOCK b T2:LOCK a → READ a → LOCK b → READ b → UNLOCK a → UNLOCK b
- エT1:LOCK a → READ a → a=a+3 → WRITE a → LOCK b → READ b → b=b+5 → WRITE b → UNLOCK b → UNLOCK a T2:LOCK a → READ a → LOCK b → READ b → UNLOCK b → UNLOCK a
正解:エ
解説
直列可能性を保証するための代表的な条件は,各トランザクションが2相ロックプロトコル(ロックを獲得するだけの成長相と,ロックを解放するだけの縮退相を明確に分け,一度ロックを解放した後は新たなロックを獲得しない)に従うことである。設問の四つの組合せのうち,T1・T2の両方が,必要な全てのロック(LOCK a,LOCK b)を先に獲得してからでなければ更新に必要なデータへのロック解放(UNLOCK)を行わない,という2相ロックプロトコルに従っているのは,T1が「LOCK a→…→LOCK b→…→UNLOCK b→UNLOCK a」,T2が「LOCK a→LOCK b→…→UNLOCK b→UNLOCK a」という順序になっている組合せだけである。他の組合せは,ロックを取得する前にデータを読み込んでいたり,一部のロックを解放した後で新たなロックを取得したりしており,2相ロックプロトコルに違反しているため,直列可能性を保証できない。
選択肢ごとの解説
- ア誤り。T1,T2とも,LOCK aを獲得する前にREAD aを行っており,ロックを取得しないままデータを参照する操作が含まれている。ロックによる排他制御が機能しないタイミングでデータを読み書きしているため,直列可能性を保証できない。
- イ誤り。T1,T2とも,UNLOCK aによっていったんロックを解放した後で,あらためてLOCK bによって新たなロックを獲得している。これは,ロックを解放した後は新たなロックを獲得しないという2相ロックプロトコルの条件(縮退相に入った後は成長相に戻らない)に違反しており,直列可能性を保証できない。
- ウ誤り。T1は2相ロックプロトコルに従っているが,T2は,LOCK a,LOCK bと二つのロックを獲得した直後にUNLOCK a,UNLOCK bと両方解放しており一見問題はないようにみえるが,READ bの前にLOCK a,LOCK bを両方獲得してからUNLOCK aで先にaを解放してしまっており,必要な処理(更新など)を行う前に一部のロックを手放す構造になっているため,T1との組合せ全体として直列可能性が保証されない場合がある。
- エ正しい。T1,T2とも,必要なロック(LOCK a,LOCK b)を全て獲得し終えるまでは一切UNLOCKを行わず,その後にUNLOCK b,UNLOCK aの順で解放しており,2相ロックプロトコル(成長相と縮退相が明確に分かれている)に従っている。したがって,この組合せは直列可能性を保証できる。