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 など) で行われるようにすることを検討します。こうすることで、ブロックが発生しても、デッドロックは発生しません。必要なアクションの詳細については、「デッドロックの検出と終了」を参照してください。