同時実行制御をしないと、操作後にデータ更新に失敗することがある。
同時実行制御には、直立化可能性が基準となる。 直立化可能性は、並行処理の結果がトランザクションを逐次実行して同じ結果が 得られることである。 逐次実行の結果は順序に変わることがあるが、 並列実行の結果がどちらかに帰属するものであれば結果を正しいとする。
異常レベルの区別は以下の通り。下にいくほど異常の度合いが高くなる。また、 下の条件が起きなければ、上の条件は起きない。
隔離性のレベルは以下の通り。
競合グラフを書くと、構造を判別し、直列化可能性を判定できる。
競合グラフを書くと、 2 つのトランザクション間で有効エッジ 2 つで巡回する組み合わせがあるか、 判定できる。巡回する場合はトランザクションの順序が決定できないので、 直列化可能ではない。
グラフに巡回がない場合、 ノードに入るエッジのないトランザクションは削除する。 残ったグラフは非巡回であるため、次のトランザクションへとつながる。 よってこの手続きで直列化可能なトランザクションを組み立てることができる。
直立化可能性を保証する同時実行制御には、2 相ロッキング法がよく使われる。
複数ある場合には直列化可能性が保証されないので、複数の場合には、 保守的ロッキング法を用いる。すなわち全てのデータにロックをかけ、 トランザクション終了後に解除する。
ロックには共有ロックと占有ロックがある。 データのアクセス中にトランザクションの閲覧を許すものが共有ロック、 書き込みをも許すものが占有ロックである。
デッドロックとは、2 つのトランザクション A, B の実行結果待ちが同時に発生し た場合のことである。A のトランザクションで B の実行結果を必要とするのに、 B のトランザクションで A の実行結果を必要とする場合に発生する。