Dead Lock Jp
デッドロック

デッドロックは複数のセッション間起こるお互いにロックし、自動的に解除できない現象です。
デッドロックの発生に必要な条件は次の4点です。

  • 特定のリソースの数が限られている。相互排除ロックである。
  • 1 つのリソースを保持したまま別のリソースを要求できる。
  • 横取りができない。
  • 循環待機の状態。

四つで必要条件になりますので、どちらひとつ解決すれば、デットロックが発生しません。
オラクルは常にセッション間の循環待機を監視しているため、デットロックが発生した場合自動的にひとつセッションのオペレーションを終了するようにしています。
また、アプリケーション開発でデッドロックは下記の方法で回避します。

  • テーブルを一律決めた順番で更新(挿入、削除含む)する。
  • オペレーションのタイムアウトを設定する。
  • オペレーションのシミュレーションをあらかじめ行う。