データベース応用 第 3 回 (データベース管理システムと関係データベースの構造) 「同時実行制御」 講義ノート目次

同時実行制御をしないと、操作後にデータ更新に失敗することがある。

同時実行制御には、直立化可能性が基準となる。 直立化可能性は、並行処理の結果がトランザクションを逐次実行して同じ結果が 得られることである。 逐次実行の結果は順序に変わることがあるが、 並列実行の結果がどちらかに帰属するものであれば結果を正しいとする。

異常レベルの区別は以下の通り。下にいくほど異常の度合いが高くなる。また、 下の条件が起きなければ、上の条件は起きない。

ダーティデータ
トランザクション中でコミットされる前のデータ

隔離性のレベルは以下の通り。

  1. 未コミットリード: ダーティリード以降全ての異常がおきうる。読み込みの みのトランザクションは可能
  2. コミットリード: 繰り返し不可能リード以降が起きうる。
  3. 繰り返し可能リードL ファントムが起きうる。
  4. 直列可能化: 上記のレベルを全てクリアし、直列可能性が保証されている状 態

直列化可能性判定

競合グラフを書くと、構造を判別し、直列化可能性を判定できる。

競合グラフを書くと、 2 つのトランザクション間で有効エッジ 2 つで巡回する組み合わせがあるか、 判定できる。巡回する場合はトランザクションの順序が決定できないので、 直列化可能ではない

グラフに巡回がない場合、 ノードに入るエッジのないトランザクションは削除する。 残ったグラフは非巡回であるため、次のトランザクションへとつながる。 よってこの手続きで直列化可能なトランザクションを組み立てることができる。

直立化可能性を保証する同時実行制御には、2 相ロッキング法がよく使われる。

  1. 対象データはアクセスされたらロックする
  2. 対象データがロックされていたら他のトランザクションは実行できず、解 除まで実行を待たされる
  3. ロックが不要になると解除する。待っていたトランザクションに 1 つがロッ クを許される

複数ある場合には直列化可能性が保証されないので、複数の場合には、 保守的ロッキング法を用いる。すなわち全てのデータにロックをかけ、 トランザクション終了後に解除する。

ロックには共有ロックと占有ロックがある。 データのアクセス中にトランザクションの閲覧を許すものが共有ロック、 書き込みをも許すものが占有ロックである。

デッドロックとは、2 つのトランザクション A, B の実行結果待ちが同時に発生し た場合のことである。A のトランザクションで B の実行結果を必要とするのに、 B のトランザクションで A の実行結果を必要とする場合に発生する。