SQLServerについて勉強中の者です。
先日、社内システムで、Aさんが大量のデータを検索している間にBさんが同じテーブルのデータを更新しようとしたところ、Aさんの検索が終わるまで長時間の待ちが発生。
連日発生してしまったため、これを改善するために、検索で使用しているSELECT文にwith(nolock)をつけるということに決まりました。
そこで2点質問があります。
[質問]
・with (nolock)をつけた場合、何かデメリットがあるのでしょうか。またそれはどういったケースで起きるのでしょうか。
・SELECT文にwith(nolock)をつけるかつけないか、一般的に作成時にどう判断しているのでしょうか。
どなたかご教授頂けると幸いです。
それはAさんのロジックを見直すとこじゃないかなあ。つかデメリットと時間を天秤にかけた結果じゃないの?
オンライン処理やバッチ処理が走ってる最中の検索では、どう頑張ってみても一貫性のないデータしかとれない。(XX:XX時点のデータなどといっても無意味)
あくまでも概数しか取れないので、with(nolock) の有無は意味がない。
ならば、本来のデータ処理の邪魔をしないように、with(nolock) を付けるのが当然。
>takasima20様
コメントありがとうございます。
社内では、今回with(nolock)を採用した際のデメリットが特に出てこなかったため、with(nolock)を採用することになりました。が、社外の方の話も聞いてみたいと個人的に思い、質問させて頂きました。
>iruyas様
なるほど。確かに本来のデータ更新を邪魔しないように検索側にwith(nolock)をつけるのは当然、というのはすとんと落ちました。
もし時間があれば追加で教えて頂きたいのですが、本来は、with(nolock)の話以前に、スナップショット分離レベルをデフォルトの「READ COMMITTED」から「READ UNCOMMITTED」に設定することが多いのでしょうか?(検討違いのことを言っていたらすみません。)
本来のデータ処理の中では、with(nolock) を付けてはいけません。
長時間かかるようなら何かしらの設計ミスです。
臨時の検索のみ、with(nolock) を付けるということです。
質問者さん、2022/03/03 22:30 の後無言ですが、上の質問に関しては話は終わっているならこのスレッドはクローズしてください。
もし、回答のコメントに書きましたチューニングと with (nolock) どちらの方向に進むのが良いかを議論したいなら、最初の質問と違うことですので新たに別スレッドを立てて質問願います。(質問者さんの会社の事情が分からない第三者がアドバイスするのは難しいとは思いますけど)
回答1件
あなたの回答
tips
プレビュー