デットロック
データベース(DBMS)の機能に
排他制御があります。
排他制御とは
あるデータレコードを更新中に
別の人がそのデータレコードを更新させないように
データレコードをロックすることです。
この排他制御がないと
最初に更新したデータが途中から更新してきたデータに変わってしまい
データの整合性が失われてしまいます。
ロックには
共有ロックと占有ロックの2種類があって(試験用語)
共有ロックは
データを参照するときにかけるロックで
お互いがデータを参照するだけに限って可能とするロックです。
占有ロックは
最初の例にあった、データレコードの更新中にかけるロックで
占有ロックがかけられたデータレコードを
他の人が更新しようとすると
占有ロックが解除されるまで待ち続けます。
デットロックは、そんな占有ロックで発生する事象で
お互いがお互い使用するデータレコードを占有ロックしてしまい
お互いがデータレコードを開放することなく待ち続けてしまうことを
デットロックといいます。
データ1→データ2のように続けて処理することを
トランザクションといい
一つの処理単位となります。
続けて処理しなければデータ整合性が保てないため
データ1を占有ロックして更新が終わっても占有ロックを解除しないのです。
デットロックの発生は
このトランザクションの設計ミスによるものです。
通常はデットロックしないように処理を設計します。
余談ですが
自動車を運転してても
進行方向の右折と対向車線の右折で後続車が譲り合わないと
このようにデットロックのようになります。
これは設計ミスではなく
ゆとりがないのが原因です。
(^-^)/

