1

この SQL を頻繁に実行する必要がある

UPDATE Users SET UserPoint=UserPoint+(@UserPoint) WHERE UserID=@UserID

ダーティ リードまたはダーティ ライトを許可することはできますが、デッドロックを回避する可能性を最大にする方法はありますか?

編集

OK、@Tomtome これはデッドロックではないかもしれません。それは私にとって朗報です。

ここで、新しい質問をフォローアップします。お役に立てば幸いです。

また、データを読み取る必要があるため、使用します

SELECT UserPoint FROM [Users] WITH (NOLOCK) WHERE UserID=@UserID

これはトランザクションではなく、単純な 1 行の SQL であり、ダーティ リードを許可する場合は、デッドロックを回避するためnolockに使用する必要がありますか?SET TRANSACTION ISOLATION LEVEL

EIDT AGAIN

SET ISOLATION LEVEL to READ UNCOMMITTED と WITH NOLOCK は同じことだと思います。完了しました。みんな、ありがとう、

4

1 に答える 1

3

デッドロックを回避するチャンスを最大化する方法はありますか?

いいえ、このステートメントはデッドロックできないためです。

デッドロックでは、少なくとも 2 つのロック (a と b) を保持する必要があります。したがって、1 つのプロセスがロック A を取得し、B を待機し、別のプロセスが B を取得し、A を待機します。待機しても何も解決できません。上記のステートメントがロックに遭遇した場合、待機します (場合によってはタイムアウトします) が、デッドロックは発生しません。

より多くのステートメントを含む大規模なトランザクションの一部でない限り。

したがって、そもそも問題は存在しません;)

于 2011-12-23T10:20:14.433 に答える