Open1

デッドロックがどういう時に起こるのかまとめる

occhiocchi

デッドロックが起こる条件

循環的なロック待ちが2つ以上のトランザクションにおいて発生していること。

  • 2つ以上のトランザクションが発生していること
  • 上記のトランザクションにおいて、ロックを2つ以上取るクエリを発行していること。

3つのトランザクション(Tx)がある時

TxAは R1 をロック済み、R2 を取得しようとするが、TxBが保持中 → Wait
TxBは R2 をロック済み、R3 を取得しようとするが、TxCが保持中 → Wait
TxCは R3 をロック済み、R1 を取得しようとするが、TxAが保持中 → Wait

参考

Coffman Conditions(Dead LockはRDBMSだけに限った話ではないので参考にした。)
https://cs341.cs.illinois.edu/coursebook/Deadlock#coffman-conditions