NOLOCKがデッドロックの問題の原因であることをどのように証明できますか?


8

私はウィンドウズ/マックタイプの議論を始めることを試みていません。

個人NOLOCK的には、再帰的な実践としては良い考えではない説得力は必要ありません。すべてを開発しているときは、反動的ではなく意図的である必要があります(/ amen)

ですから...担当プログラマが主張するのNOLOCKが先です。すべてのアドホッククエリで、プロダクションをクエリするときは常にお勧めします。すべてのテーブルにnolockヒントがないストアドプロシージャを見たことはありません。

それをバックアップする何かがなければ、コアの信念はすべて間違っていると言ってやって来る人になりたくない。

さまざまなブログ投稿の下にあるコメントセッションを見るだけでは、リンクを送信するだけでは不十分な場合があります。長年の信念など...それが問題であると確信していない人もいます。参照:私が読んだすべてのnolockブログ投稿の下のコメントセクション。

現在、他の一部のDBAは、不可解なデッドロックに取り組んでいます。NOLOCKがソースであるかどうかをどのように判断しますか?

トレースなどからXMLを見ることをお勧めしますが、これはデッドロックが問題を引き起こしていることを明示的に示すものではありませんか?単純なエラーメッセージは見たことがありません。本当?

他にどのようにしてこれらのデッドロックをこれに固定することができますか?

のようなDDLステートメントCREATEは手がかりになります。指摘することができる出力や、アラームを上げる前に理論を裏付けるのに役立つと思われるデータの一部はありますか?

または、トレースフラグまたは拡張イベントを実行して、デッドロックが発生したときに何が実行されているかを特定し、DDLステートメントから推定していますか?

nolockヒントを使用してデータがめちゃくちゃになるさまざまな方法をすべて見てみると、明確に特定するのは難しい問題のようです。

回答:


16

どのように主張するかNOLOCKは、担当の建築家が進むべき道であると主張しています。すべてのアドホッククエリで、プロダクションをクエリするときは常に推奨します。すべてのテーブルにnolockヒントがないと、sprocを見たことがありません。

申し訳ありません。これは、SQL Serverの専門家の間でアンチパターンとして広く一般的に見なされていますが、実践が本当に根付いていて、1人の誠実で深い信念に基づいている場合、現場で事実を変更するためにできることはないかもしれません。

「リンクを送信するだけでは十分ではない」という質問ですが、代わりに何を望んでいるかは不明です。私たちはここの答えに世界で最も説得力のある議論を書くことができます、そしてあなたはまだそれへの「リンクを送る」ままにされます。結局のところ、ここにいる人は、特定の状況(ある場合)で成功する引数のセットを知ることはできません。

それでも、以下は、一部の人々が以前の一般的な慣習を変更するのに十分説得力があると思うほとんどのポイントをカバーしています:

それでも、この戦いに「勝つ」ことができない場合があります。私はこれを行う環境で作業し、リスクとそれを行わない理由を理解しましたが、とにかくそれを続けました。これらは明るく論理的な人々でしたが、結局それは私が幸せに働くことができない環境でした。

現在、他の一部のDBAは、不可解なデッドロックに取り組んでいます。それがどのようにNOLOCKsソースであるかをどのように判断しますか?

デッドロックの発生率NOLOCK減らすためにヒントが導入されるという、より一般的なパターン(おそらく、以前はより一般的でした)。これにより、共有ロックの数を減らすと自然に互換性のないロックが行われる可能性が減りますが、根本的な問題に対する適切な解決策ではなく、前のセクションで説明したすべての警告が伴うため、「うまくいく」可能性があります。

それにもかかわらず、NOLOCKヒントデッドロックの新しい方法を導入する可能性があります。コミットされていない読み取りの分離を使用すると、一時的なブロッキング状態(競合するリソースが利用可能になったときに解決)を解決できないデッドロック(どちらのウェイターも進行できない)に削除できます。オーバーラップ。デイブバランタインはここに例があります:

デッドロックの処理に関するより一般的なアドバイスについては、出発点として以下をお勧めします。

また、ドキュメントに慣れる必要があります。

その他の役立つリソース:


5
「それでも、あなたはこの戦いに「勝つ」ことができないかもしれません。私はこれを行う環境で働いて、それをしないことのリスクと理由を理解しましたが、とにかくそれを続けました。これらは明るく論理的な人々でしたが、結局、それは私が幸せに働くことができない環境でした。」これが正解であることが判明しました。
user238855
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.