平成23年特別試験午後問題 問3

問3 データベース

データベースのトランザクション管理に関する次の記述を読んで,設問1~4に答えよ。

 個人向けに,画材をインターネット販売する会社が運営するWebサイトがある。
 このWebサイトが在庫管理に利用しているデータベースでは,絵の具の在庫数は色別に個々のデータとして管理されており,処理に応じて次の3種類のトランザクションが生成される。
  1. 1回の商品注文に対して,一つの出荷トランザクションが生成される。
  2. 1回の商品入荷に対して,一つの入荷トランザクションが生成される。
  3. 1回の在庫照会に対して,一つの照会トランザクションが生成される。
 なお,一つのトランザクションで,複数の色の絵の具を処理することができる。

設問1

ACID特性に関する次の記述中の に入れる正しい答えを,解答群の中から選べ。

 ACID特性とは,データベースの一貫性を保証するために必要な特性で,原子性,一貫性,独立性,耐久性の四つがある。このうち,一貫性や独立性を保証するためにトランザクション管理では排他制御が必要となる。例えば,白絵の具の在庫数が50だった場合,表1に示すトランザクションT1とT2が同時に実行されたとき,排他制御を行わないと実行後の在庫数は55とならず,在庫数がa又はbとなってしまう可能性がある。
 なお,各トランザクションは,図1の①~③の順で在庫数データを処理する。
pm03_1.gif
a,b に関する解答群
  • 40
  • 45
  • 50
  • 60
  • 65
解答選択欄
  • a:
  • b:
  • a=
  • b=
※aとbは順不同

解説

ある1つのデータに対して複数の更新処理が同時並行的に行われる環境において排他制御を行わない場合、片方の更新処理が全く実行されなかったような結果になってしまうことがあります。これを更新消失を言います。

以下の順番で実行されるとトランザクションT1が結果に反映されません。
  1. T1が在庫数データを読み込む(データT1=50)
  2. T2が在庫数データを読み込む(データT2=50)
  3. T1が読み込んだデータを-5する(データT1=50-5=45)
  4. T2が読み込んだデータを+10する(データT2=50+10=60)
  5. T1が在庫数データにデータT1を書き込む(在庫数データ=45)
  6. T2が在庫数データにデータT2を書き込む(在庫数データ=60)
また、以下の順番で実行されるとトランザクションT2が結果に反映されません。
  1. T1が在庫数データを読み込む(データT1=50)
  2. T2が在庫数データを読み込む(データT2=50)
  3. T1が読み込んだデータを-5する(データT1=50-5=45)
  4. T2が読み込んだデータを+10する(データT2=50+10=60)
  5. T2が在庫数データにデータT2を書き込む(在庫数データ=60)
  6. T1が在庫数データにデータT1を書き込む(在庫数データ=45)
以上のようにどちらの更新処理が先に行われるかによって結果が異なり、最後にT1の書き込み処理が行われた時には在庫数データは45、T2の書き込み処理が行われた時には在庫数データは60になります。

a=イ:45
 b=エ:60
 ※順不同

設問2

入荷トランザクション及び出荷トランザクションを処理する場合は対象データを占有ロックし,照会トランザクションを処理する場合は共有ロックする。
 なお,このデータベースを管理するDBMSでは,あるトランザクションが共有ロックしているデータを,ほかのトランザクションからロックする場合,共有ロックの要求は成功するが,占有ロックの要求は共有ロックが解除されるまで待ち状態となる。
 表2に示すトランザクションT3~T6を,図2に示すとおりに実行し,ロックを要求した場合,それぞれのトランザクションの状態について正しい説明を,解答群の中から選べ。
pm03_2.gif
解答群
  • T4,T5,T6とも待ち状態となる。
  • T4,T5,T6とも待ち状態とならない。
  • T4,T5は待ち状態となるが,T6は待ち状態とならない。
  • T4は待ち状態となるが,T5,T6は待ち状態とならない。
  • T6は待ち状態となるが,T4,T5は待ち状態とならない。
解答選択欄
  •  
  •  

解説

入荷及び出荷は「占有ロック」、照会は「共有ロック」なのでトランザクションT3~T6が要求するロックの種類は以下のようになります。
pm03_5.gif
図2「トランザクションT3~T6の実行例」の通りに実行された場合、在庫数データのロックと各トランザクションの動作は次のとおりです。
pm03_6.gif
  • T3が在庫数データに共有ロックを要求
    在庫数データはロックされていないため成功
  • T6が在庫数データに共有ロックを要求
    在庫数データの状態は共有ロック、「共有→共有」は許可されるため成功
  • T4が在庫数データに占有ロックを要求
    在庫数データの状態は共有ロック、「共有→占有」はロックが解除されるまで待ち状態
  • T5が在庫数データに占有ロックを要求
    在庫数データの状態は共有ロック、「共有→占有」はロックが解除されるまで待ち状態
上記のようにT4,T5はデータの共有ロックが解除されるまで待ち状態になり、T6の共有ロック要求は成功するため待ち状態になりません。

∴ウ:T4,T5は待ち状態となるが,T6は待ち状態とならない

設問3

出荷トランザクションT7の処理内容を表3に示す。次の記述中の に入れる正しい答えを,解答群の中から選べ。
 なお,トランザクションT7は,図3の①~⑧の順で在庫数データを処理する。
pm03_3.gif
 データをロックしている時間を最も短くするためには,"赤絵の具の在庫数データをロックする。"を挿入すべき適切な位置はcで,"白絵の具の在庫数データのロックを解除する。"を挿入すべき適切な位置はdである。
 なお,ほかのトランザクションとのデッドロックの発生に対する考慮は不要とする。
c,d に関する解答群
  • α
  • β
  • γ
  • δ
  • ε
解答選択欄
  • c:
  • d:
  • c=
  • d=

解説

同時更新による更新消失を防ぐには、対象のデータを他のトランザクションからアクセスできないようにロックし、1つのトランザクションだけが更新処理を実行できるように制御する必要があります。

設問1の例からもわかるように、更新消失は更新対象データが複数のトランザクションに読み込まれ、各々のトランザクションで更新された値の書き込み処理が交互に行われた場合に発生します。これを防ぐには更新対象データの読込み前から、書込み処理の完了までの間、更新対象データにロックをかけ、常に1つのトランザクションだけが独占的に資源への更新権限をもつように制御する必要があります。

cについて〕
赤絵の具の在庫数データからの読込みは③で行われているため、ロックする時間を最も短くするためには、③の直前であるβでロックをかけるのが適切です。

c=イ:β

dについて〕
白絵の具の在庫数データへの書込みは⑤で行われているため、ロックする時間を最も短くするためには、その直後であるδでロックを解除するのが適切です。

d=エ:δ

設問4

表4に示すトランザクションT8~T11のうち,解答群の組合せの中から,同時に処理された場合にデッドロックが発生する可能性のある組合せを選べ。
 なお,トランザクションT8~T11では,各絵の具の在庫数データをどのような順番で処理するかは,分からないものとする。
pm03_4.gif
解答群
  • T8,T9
  • T8,T9,T10
  • T9,T10,T11
  • T10,T11
解答選択欄
  •  
  •  

解説

デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。

デッドロックは、複数の同一資源が別々のプロセスによって排他的に使用され、かつ、その占有順序が異なる場合に発生する可能性があります。

まず、4つのトランザクションの種別を見てみると「出荷」、又は「入荷」となっており、全てのトランザクションがデータの占有ロックを伴う更新処理であることがわかります。以下は各トランザクションが使用するデータをわかりやすくするために色分けしたものです。
pm03_7.gif
設問3のトランザクションT7のように開始時に全てのデータを読込み、ロックの解除が最後に行われる実装であったとすると、T8~T11の組合せでデッドロックが発生するのは以下のケースです。
  1. T8が白絵の具の在庫データの占有ロックを要求→成功
  2. T9が赤絵の具の在庫データの占有ロックを要求→成功
  3. T10が青絵の具の在庫データの占有ロックを要求→成功
  4. T8が赤絵の具のデータをロック要求するが、T9による占有ロック中のため待ち状態になる
  5. T9が青絵の具のデータをロック要求するが、T10による占有ロック中のため待ち状態になる
  6. T10が白絵の具のデータをロック要求するが、T8による占有ロック中のため待ち状態になる
pm03_8.gif
このようにロックが行われる順序によっては3つのトランザクションがお互いのロックしているデータのロック解除を待つ状態になり、処理を続行することができなくなってしまいます。

∴イ:T8,T9,T10

Pagetop