MSSQLSERVER_1205

詳細

製品名

SQL Server

製品バージョン

10.50

製品ビルド番号

10.50.0000.00

イベント ID

1205

イベント ソース

MSSQLSERVER

コンポーネント

SQLEngine

シンボル名

LK_VICTIM

メッセージ テキスト

トランザクション (プロセス ID %d) が、%.*ls 個のリソースで他のプロセスとデッドロックして、このトランザクションがそのデッドロックの対象となりました。トランザクションを再実行してください。

説明

別々のトランザクションで、リソースへのアクセス順序が競合し、デッドロックが生じました。次に例を示します。

  • Transaction2 が Table2.Row2 を更新している間に、Transaction1 が Table1.Row1 を更新しました。

  • Transaction1 は Table2.Row2 を更新しようとしましたが、Transaction2 のコミットがまだなので、ブロックされました。

  • 今度は Transaction2 が Table1.Row1 を更新しようとしましたが、Transaction1 のコミットがまだなので、ブロックされました。

  • Transaction1 が Transaction2 の完了を待機していますが、Transaction2 は Transaction1 の完了を待機しているので、デッドロックが生じました。

システムがこのデッドロックを検出すると、いずれか一方のトランザクションがデッドロックの対象に選ばれ、そのトランザクションがロールバックされます。デッドロックの詳細については、「デッドロック」を参照してください。

ユーザーの操作

トランザクションを再実行します。また、デッドロックを回避できるようにアプリケーションを修正します。デッドロック対象として選択されたトランザクションは、再試行が可能です。同時に実行されている操作によって状況が異なりますが、再試行は成功する可能性があります。

デッドロックを回避するには、すべてのトランザクションから行に対するアクセスが、同じ順序 (Table1 の次に Table2 など) で行われるようにすることを検討します。こうすることで、ブロックが発生しても、デッドロックは発生しません。必要なアクションの詳細については、「デッドロックの検出と終了」を参照してください。