同時実行制御と排他制御
同時実行制御とは、複数のトランザクションが同一のデータベースを同時に処理しても論理的な矛盾が生じないように、実行の順序や競合を調整する仕組みである。その代表的な技法が排他制御であり、同じデータを複数の処理が同時に更新する場面で、更新対象へのアクセスを調整して矛盾を防ぐ。並行処理では、この調整を誤るとデッドロックや変更消失といった問題が起こるため、現象ごとの原因を正確に区別することが重要である。
排他制御の仕組みと周辺の技法
排他制御は、同じデータを複数のトランザクションが同時に更新して矛盾するのを防ぐため、更新対象へのアクセスを順番に調整する技法である。 一方、再編成はデータベースの記録を整理し直す処理であり、同時に行われる更新の順序を調整するものではない。 正規化は表の重複や更新時の不整合を抑えるためのデータ構造の設計の考え方であり、複数のトランザクションによる同時更新を制御するものではない。 整合性制約はデータが満たすべき条件を定め、条件に反する更新を防ぐものであるが、トランザクション同士の同時実行を調整する技法ではない。 したがって、同時実行制御の問題を考えるときは、これらの周辺の技法と排他制御の目的を混同しないことが必要である。
ロックの種類と両立性
排他制御は、ロックによって実現されることが多い。共有モードは、他のプログラムが同じデータを同時に読み取ることを許すモードであり、共有モード同士は並行して実行できる。 排他モードは、他のプログラムによる共有・排他のいずれのアクセスとも競合する。 そのため、先行するプログラムが排他モードであれば、後続のプログラムは先行の終了まで待たされる。 先行が共有モードで後続が排他モードの場合も、後続は待たされる。 この両立性の表を基準にすれば、並行実行の可否は、先行と後続のどちらかが排他モードかどうかで判断できる。
この節の続き
- 2相ロッキングとデッドロック
- 変更消失と読み取りの不整合
- 試験で問われやすい区別
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む