デッドロック本項ではデッドロックの問題を発見して解決する方法について説明しています。使用しているアプリケーション内でデッドロックをどのようにして検出するか、そしてデッドロックをどのようにしたら解決できるのかなどについて説明していきます。複数のスレッドが共有リソース上でロックしている場合に発生する可能性があります。シンプルなデッドロックの発生例を示します。ロックを持っています。持っているためそれをロックしてブロックしようとします。ロックを持っているためそれをロックしてブロックしようとします。他のスレッドですでにロックされているリソースへのアクセスを待機することになります。アクセス順序に注意を怠った場合にデッドロックは非常に簡単に発生します。デッドロックの問題を回避するためさまざまな技術や詳細設定を使用することができます。これらについては本項で後述します。デッドロックの検出が可能です。待機中のトランザクションや、ブロック中のトランザクションに関するグローバルな内部グラフがあります。上で現在ロックを保持しているトランザクションを割り出してそれ自体をブロック中のトランザクションのグラフに追加します。グラフの具体例を表29.1「ブロックされているトランザクションテーブルの例」に示しています。Tx1スレッドが実際にブロックを行う前に、デッドロックの問題があるかどうかを検出しようとします。検出はブロックトランザクショングラフを検討することによって行われます。グラフを検討するたびにブロックされているトランザクションの記録を残していきます。この例外によりトランザクションのロールバックが行われて、このロールバックによりトランザクションが保持しているすべてのロックが解放されることになります。