0

ONコミットされたスナップショット分離を読み取り、データベースの分離を許可しました。まだデッドロック エラーが発生します。私は何が起こっているのかを知っていると確信しています...

  1. 最初のトランザクションは、トランザクションの開始時にシーケンス番号を取得します。
  2. 2 番目のトランザクションは、トランザクションの開始時に新しいシーケンス番号を取得しますが、最初のトランザクションが既に取得した後です (2 番目のシーケンス番号は最初のシーケンス番号よりも新しい)。
  3. 2 番目のトランザクションは、最初に更新ステートメントに到達します。行のバージョン管理をチェックすると、最初のトランザクションがまだ更新されていないため、両方のトランザクションに先行するレコードが表示されます。行のシーケンス番号がコミットされた状態にあることがわかり、順調に進んでいます。
  4. 最初のトランザクションが順番に実行され、2 番目のトランザクションと同様に、コミットされた同じシーケンス番号が検出されます。コミットしようとすると、別のトランザクションがコミットしようとしているレコードを既に更新しており、それ自体をロールバックする必要があることがわかります。

これが私の質問です。このロールバックはトレースでデッドロックとして表示されますか?

4

3 に答える 3

-1

デッドロックを防ぐには、両方を有効にします

ALLOW_SNAPSHOT_ISOLATION および READ_COMMITTED_SNAPSHOT

ALTER DATABASE [BD] SET READ_COMMITTED_SNAPSHOT ON; ALTER DATABASE [BD] SET ALLOW_SNAPSHOT_ISOLATION ON;

ここで違いを説明してください http://technet.microsoft.com/en-us/sqlserver/gg545007.aspx

于 2013-10-25T15:39:51.210 に答える