2

これまで何度も with(nolock) ヒントを読んで使用してきましたが、特定のケースについて質問があります。

私の場合、1 つのデータベースを参照および更新するコードのセットが 1 つあります。
このコードは、シングル スレッドで実行することを意図していました。数か月前、彼らはコードを変更せずにマルチスレッド化することを決定しました。彼らが行った方法は、それぞれの異なる「コード プロセッサ」に異なる店舗グループを管理させることでした。

たとえば、プロセッサ 1 はストア 1 から 20 を処理し、プロセッサ 2 はストア 21 から 40 を処理します。

デッドロックが発生し始めるまで、すべてが順調に見えました。デッドロックは常にページ上にあります...ロックが行のみにある場合、あるプロセッサからのデータが別のプロセッサからのデータと競合することはないため、デッドロックは発生しません。その理論に基づいて、ロックする必要のないすべての選択に With(Nolock) ヒントを配置することにしました (まだ製品化されていません)。

私の同僚がこの記事を持ってきて私を怖がらせるまで、すべてがうまくいき、ダンディに見えました...それから私はそれを読みまし...

私の場合、With(Nolock) ヒントを使用する危険性はありますか?データがプロセッサ間で競合することはありませんか?

4

3 に答える 3

1

はい、正確でなければならないデータを収集している場合、問題が発生する可能性があります。「ダーティ」/不正確なデータを取得して、それを保持する可能性があります。代わりに、インデックス作成がデッドロックの問題を修正できるかどうかを調べましたか? 多くの場合、デッドロック シナリオは、使用可能なインデックスによって制御されるデータ ページへのアクセス パターンを制御することで解決できます。

私がやりたいことは、デッドロック グラフを見て競合がどこにあるかを確認し、次にコード内の操作の順序と、データへのアクセス/変更に使用されているインデックスを調べて、削除するように調整できるかどうかを確認することです。デッドロックのリスク。

于 2015-12-15T19:43:39.797 に答える