2016-11-06 2 views
0

Select(nolock)の後にInsert/Updateを実行すると、予期しない結果が同じデータで得られますか?

同じレコードのselect(nolock)の後にinsert/updateを実行すると予期しない結果が生じることがありますか?

私はいつも(完全な)更新/挿入されたレコードを取得していますか?

ご協力いただきありがとうございます。

+1

気にするなら、なぜあなたは 'NOLOCK'ヒントを使用しますか? –

+0

(b)はロックされませんが、しばらくしたら奇妙な結果に気付きます。多くの同時スレッドがあり、すべてがユニークなレコード(新規または更新済み)で動作しています。 – Gerard

+0

NOLOCKスキャン中に並行挿入/更新アクティビティを実行すると、行が欠落または重複する可能性があります。アプリケーションが悲観的なロックに依存しない限り、READ_COMMITTED_SNAPSHOTデータベースオプションを有効にする方がよいでしょう。 –

答えて

0

すべてが単一プロセスで行われている場合、データは正しいでしょう。 しかし、ストアドプロシージャが別のプロセスIDから呼び出され、ユーザーが他のプロセスでselect(nolock)を実行している場合、selectではデータの不一致が発生する可能性があります。

ストアドプロシージャはまだ使用されている可能性があります。

+0

Thx Signh!同時スレッドは多数存在し、すべてが一意のレコード(新規または更新)で動作します。まだ問題はありませんか? – Gerard

+0

理想的には、コミットされていないノーロックとリードは使用すべきではありませんが、結果セットをグラフまたはダッシュボードにプロットし、トレッドを表示しているときに不一致が生じる場合は、ノーロックを使用できます。 –

関連する問題