話
Snapshot Isolation を使用して MERGE 経由で複数の挿入を実行する SPROC があります。この SPROC は非常に高い負荷で呼び出され、多くの場合並列で呼び出されるため、変更の競合のためにスナップショットがロールバックされたことを示すエラー 3960 がスローされることがあります。これは、同時実行性が高いためです。
問題
後でこの作業を実行するために「再試行」キューを実装しましたが、エラーを再現してチェックが正確であることを確認するのは困難です。
質問
スナップショットの失敗 (具体的には 3960) を再現して、再試行ロジックが機能していることを確認するにはどうすればよいですか?
すでに試した
- RAISEERROR は、既存のエラーを発生させることができず、ユーザー定義のエラーのみを発生させることができないため、機能しません
- 同じレコードを再挿入しようとしましたが、2 つの異なるトランザクションが別のトランザクションを「競合」させているわけではないため、これは同じ失敗をスローしません。