悲観的並行性制御

悲観的並行性制御



悲観的並行性制御(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

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。