MSSQLSERVER_1205
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
詳細
属性 | Value |
---|---|
製品名 | SQL Server |
イベント 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 の完了を待機しているので、デッドロックが生じました。
システムによって、このデッドロックが検出され、関係するトランザクションの 1 つが "犠牲者" として選択されます。 次に、このエラー メッセージが発行されて、犠牲者のトランザクションがロールバックされます。 詳細については、「デッドロック」を参照してください。
ユーザーの操作
デッドロックはほとんどの場合、アプリケーション関連の問題であり、アプリケーション開発者はコードを変更する必要があります。 エラー 1205 を受け取った場合の 1 つの方法は、クエリをもう一度実行することです。 再試行する方法の例については、このブログを参照してください。 - デッドロックを処理してクエリを再実行する: 開発者向けのデッドロック シミュレーター アプリ: アプリで SQL デッドロックの問題を処理する方法
また、デッドロックを回避できるようにアプリケーションを修正します。 デッドロック対象として選択されたトランザクションは、再試行が可能です。同時に実行されている操作によって状況が異なりますが、再試行は成功する可能性があります。
デッドロックを回避するには、すべてのトランザクションから行に対するアクセスが、同じ順序 (Table1 の次に Table2 など) で行われるようにすることを検討します。 こうすることで、ブロックが発生することはあっても、デッドロックは発生しません。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示