悲観的
並行性制御(pessimistic concurrency control)とは、複数の
トランザクションが同時にデータにアクセスする際に、データの一貫性を保つための制御方式の一つです。この方式は、データへのアクセス競合が頻繁に発生すると仮定し、
トランザクション開始時にロック(排他制御)を獲得することで、他の
トランザクションからの干渉を防ぎます。
悲観的ロックの概念
悲観的
並行性制御の中核となる概念は「悲観的ロック」です。
トランザクションがデータに対して更新操作を行う際、事前にそのデータに対する排他ロックを取得します。これにより、ロックを保持している
トランザクションが完了するまで、他の
トランザクションはデータの更新はおろか、参照さえも制限される場合があります。これにより、データへの同時アクセスによる不整合を防ぎ、一貫性を保証します。
処理の流れ
1.
ロックの確認:
トランザクションの開始時に、対象データがロックされていないかを確認します。もしロックされていた場合は、ロックが解除されるまで待機するか、エラーとして処理を中断します。
2.
ロックの獲得: 対象データがロックされていないことを確認後、排他ロックを獲得します。これにより、他の
トランザクションは当該データにアクセスできなくなります。
3.
データ操作: ロックを獲得した
トランザクションは、安全にデータの読み書き操作を行います。
4.
ロックの解放:
トランザクションが完了(コミットまたはロールバック)すると、獲得していたロックを解放します。これにより、他の
トランザクションが当該データへのアクセスが可能になります。
悲観的
並行性制御とは対照的に、「楽観的
並行性制御」があります。楽観的
並行性制御は、データ競合が稀であるという前提に立ち、
トランザクション開始時にロックを行いません。データの更新時に初めて競合が発生したかをチェックし、競合が発生した場合のみロールバックなどの処理を行います。このため、ロックによるオーバーヘッドを減らすことができますが、競合が発生した場合の処理が必要となります。
メリット
データの一貫性: 厳格なロックにより、データの同時更新による不整合を防ぐことができます。
デッドロックの回避: 適切にロック管理を行うことで、デッドロックの発生を回避できます。
デメリット
パフォーマンス低下: ロックの取得と解放にはオーバーヘッドが発生し、特に
トランザクションの実行時間が長い場合にシステムのパフォーマンスを低下させる可能性があります。
同時実行性の低下: 排他ロックにより、他の
トランザクションの並行処理を制限してしまうため、同時実行性が低下する可能性があります。
デッドロックのリスク: ロックの取得順序が不適切な場合、デッドロックが発生する可能性があります。
適用場面
悲観的
並行性制御は、以下のような場面で適用されることが多いです。
データの不整合が許容されないシステム: 金融システムや在庫管理システムなど、厳密なデータの一貫性が求められる場合に適しています。
更新競合が頻繁に発生するシステム: 複数のユーザーが同時に同じデータに対して更新処理を行う可能性が高い場合に、データの整合性を保つために有効です。
まとめ
悲観的
並行性制御は、データの一貫性を厳密に保つことができる一方で、パフォーマンスや同時実行性に影響を与える可能性があります。そのため、システムの要件に応じて、楽観的
並行性制御との使い分けや、ロックの粒度を適切に設定することが重要です。
参考文献
R. Elmasri et al.: Grundlagen von Datenbanksystemen. 3. Auflage. Pearson Studium, 2002, ISBN 3-8273-7021-3, S. 714 ff.
Alfons Kemper, André Eickler: Datenbanksysteme – Eine Einführung. 11 Auflage. Oldenbourg, München 2011, ISBN 978-3-486-59834-6, S. 329 ff.
J. Gray, R. Lorie, G.F. Putzolu, I.L. Traiger: Granularity of Locks and Degrees of Consistency in a Shared Database. In: G.M. Nijssen (Hrsg.): Modeling in Data Base Management Systems. North Holland Pub., 1976, S. 364–394.
Skript zur Vorlesung Datenbanksysteme II (PDF; 435 kB) LMU München
inst.eecs.berkeley.edu (PDF; 1,3 MB) University of Berkeley
関連項目
楽観的
並行性制御
外部リンク
Skripte zum automatischen Lösen von Schedules mittels 2PL