デッドロック被害者とは?
デッドロックの被害者は、サーバーに接続しているクライアントとして機能するコンピューターユーザーであり、サーバーホストがデッドロックを解決するために終了することを選択した接続です。 このタイプのデッドロックは、2つの異なるプロセスが同じリソースを使用しようとしたときによく発生し、両方のプロセスがロックします。 この問題を解決するために、多くのサーバーデータベースシステムは、デッドロックの発生を検出し、2つのプロセスのいずれかの接続を終了することを選択できます。 デッドロックの被害者は、プログラムによって任意に選択できますが、ユーザーは通常、システムに最も簡単に再接続できる人として選択されます。
「デッドロックの被害者」という用語は通常、ユーザーの接続が終了したときにシステムがユーザーに表示するエラーまたは例外メッセージで使用されます。 このエラーは、一般にデッドロックと呼ばれる状況で発生します。 一般に、サーバーに接続している2人のユーザーがシステムにロックを作成する方法で同じリソースにアクセスしようとすると、デッドロックが発生します。 たとえば、ユーザーAがリソース1を使用しており、リソース2も使用する必要があり、ユーザーBがリソース2を使用しており、リソース1も使用する必要がある場合、どちらのユーザーもプロセスを終了できないため、デッドロックが発生します。
この例では、2人のユーザーのうち1人がシステムによってデッドロックの犠牲者として選択され、サーバーへの接続が終了します。 これが発生すると、他のユーザーはプロセスを終了してデッドロックを終了し、デッドロックの被害者はサーバーに再接続できます。 ほとんどのサーバーデータベースプログラムは、通常一定時間後にデッドロックを検出するデッドロック検出を使用して設計されています。 デッドロックは必ずしも大きな問題ではありませんが、ユーザー、特にデッドロックの被害者として選ばれたユーザーにとっては迷惑であり、サーバーデータベースプログラミングの1つ以上の間違いを示しています。
サーバーがデッドロックの被害者を選択する方法はさまざまです。 一部のプログラムは、純粋にランダムに被害者を選択します。 これはかなり効果的ですが、どの選択も解決策とデッドロックの終わりにつながるため、これは常に理想的な方法ではありません。 通常、サーバーは、2人のユーザーを評価して、最も簡単に再接続できるユーザー、または切断によるデータの損失が最も少ないユーザーを選択するようにプログラムされています。