1

同時実行エラーを防ぐために、すべての SQL 呼び出し (すべてストアド プロシージャ内) の SQL ステートメント (更新、挿入、アップサート、さらにはテーブルの読み取りなどのすべての crud 操作) をこれでラップすることにしました。

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin tran

--sqlstatements here

オプション (MAXDOP 1)

コミットトラン

私はパフォーマンスについて心配していないとだけ言っておきましょう。制約違反と、2 つ以上のスレッドが同時に同じデータベースにアクセスすることによって引き起こされるデッドロックを防ぎたいだけです。

これにより、競合状態から生じるすべてのデッドロックと制約の問題が効果的に取り除かれますか?

シリアル化可能なトランザクションで呼び出しを既にラップしている場合、CUD 関数に対して with (hold lock, update lock) を明示的に使用する必要がありますか?

4

2 に答える 2

2

「同時実行の問題」の意味によって異なります。これにデッドロックが含まれている場合でもupdlock、クエリにロック ヒント (例: )を含める必要がある場合があります。

于 2013-08-07T08:08:45.507 に答える