排他制御
はいたせいぎょ
ひとことで言うと
複数のトランザクションが同一データに同時アクセスする際にデータ整合性を保つ制御機構。
解説
複数のトランザクションが同時に同じデータにアクセスする際に、データの整合性を保つための制御機構。ロック方式が代表的で、共有ロック(読取専用)と排他ロック(更新用)を使い分ける。適切に管理しないとデッドロックが発生する可能性があるため、ロックの粒度や順序の設計が重要となる。
くわしく解説
排他制御とは、データベースやファイルシステムにおいて複数のトランザクションが同じデータに同時アクセスする場合に、データの不整合が生じないよう制御する仕組みである。代表的な方式はロック方式であり、共有ロック(読取専用・他の読取は許可)と排他ロック(更新用・他の一切のアクセスを禁止)を使い分ける。排他制御が適切に実装されていない場合、更新の喪失・ダーティリード・反復不能読取などの整合性問題が発生する。また、複数トランザクションが互いのロック解放を待ち続けるデッドロックが発生するリスクもあり、タイムアウト設定やロック順序の統一などで対策される。楽観的ロック(更新時に競合を検出)と悲観的ロック(アクセス前にロック取得)という考え方もある。
具体例で考えよう
銀行システムで口座Aから口座Bへ送金する際、2人の利用者が同時に同じ口座の残高を参照・更新しようとすると、排他制御なしでは残高が誤った値になる。ロックにより一方の処理が完了するまで他方を待機させることで整合性を保つ。
試験対策ポイント
共有ロックと排他ロックの違いは最頻出。デッドロックの発生条件と対策、楽観的ロックと悲観的ロックの概念も問われる。ACID特性との関連(隔離性)も整理しておくこと。