すべてのクエリで(nolock)ヒントを使用しないで正当化する


23

クエリヒントを使用しないことを正当化する必要がありましたか?

WITH (NOLOCK)非常に忙しいサーバーにヒットするすべてのクエリで見ています。開発者は、コードで何千回もそれを見るのが嫌いなので、デフォルトでオンにするだけだと思っているのです。

ダーティリードが許可され、最終的に不良データが発生することを説明しようとしましたが、パフォーマンスのトレードオフはそれだけの価値があると考えています。(それらのデータベースは混乱しています。パフォーマンスの問題があるのも不思議ではありません。)

このNOLOCKヒントの悪用に対するケースを提示する方法の明確な例があれば、それはありがたいです。

回答:


17

あなたは自分の戦いを選び、このような戦いは簡単には勝てない。すべてのDMLがROWLOCKヒントでヒントされるシステムがあります(1行または数千行の変更に関係なく)。パフォーマンスが本当に低下する理由をいくつか示しましたが、システムは既に動作しているため、変更に対する抵抗があります。ただし、これを今後使用しないように十分に確信していることに注意してください。

NOLOCKにはそれがありますが、それを使用する際のトラブルを紹介する良い参考文献をいくつかお勧めできます。



9

分離レベルを理解することの重要性を同僚に説明する必要があります。例を示します。Little Kendraの分離レベルポスターで見つけた最も素敵で簡単な説明。nolockヒントが必要だと思う理由を尋ねます。「トランザクション分離レベルの設定...」ステートメントを使用しないのはなぜですか?修正したい状況を正確に尋ねてください。たぶん、デッドロックやブロッキングなどがあります。ロックを保持したくない場合は、スナップショット分離レベルを検討することがあります。

彼らに尋ねることによってのみ、あなたは明確な絵を持つことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.