この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 11079|答える: 1

[出典] MSSQL (NOLOCK)のダーティリード

[リンクをコピー]
2020年4月3日 10:06:04に投稿 | | |
短所:

1. 汚い読み物が生まれる

2. 選択されたクエリ文にのみ適用されます

メリット:

1. 一部のファイルでは、WITH(NOLOCK)を用いてSQLクエリ効率を33%向上させることができると記載されています。

2. 内側結合文に使われる

ダーティリード:あるユーザーがリソースに修正を加え、別のユーザーがその修正レコードを読み、最初のユーザーが修正を放棄するとデータが前の修正に戻るため、これら2つの異なる結果はダーティリードとなります。

詳細:

SQLクエリの性能を向上させるために、一般的に最初に考慮すべきはインデックスを作成することです。 実際、インデックスの確立に加えて、SQLコマンドを配置する際に構文にWITH(NOLOCK)セクションを追加することで、多数のオンラインクエリが存在する環境でデータセットがロックされる現象を改善し、クエリ性能を向上させることができます。

ただし、SQL SELECTと(NOLOCK)がダーティーリードを引き起こす可能性があることに注意が必要です。

例えば:

単純なSELECTに加えて、JOINと組み合わせたSELECT構文も使えます。 しかし、DELETE、INSERT、UPDATE、その他のトランザクションが必要なコマンドは良くありません...


一部のファイルでは、WITH(NOLOCK)でSQLクエリ効率を33%向上させることができると書かれています。
WITH(NOLOCK)を追加すると、SQL ServerはSELECTコマンドが現在のテーブルのトランザクションロック状態を考慮しなくてよいと伝え、パフォーマンスが大幅に向上し、データベースシステムのロック現象(デッドロックを含む)を大幅に減少させます。

注意点として、WITH (NOLOCK) は現在のテーブルのトランザクションロックを考慮しないため、複数のフェーズにあるデータ(例:複数のテーブルをまたぐトランザクション>例:引き出しシステム)がある場合、WITH (NOLOCK) は現在トランザクション処理中のデータを無視します...

率直に言えば、NoLockを使うと、トランザクションがまだ完了していないにもかかわらず修正されたデータを読み取ることができます。 したがって、トランザクションデータのリアルタイムの整合性を考慮する必要がある場合は、WITH(NOLOCK)の使用を慎重に検討すべきです。

トランザクションを考慮しなくていいなら、WITH(NOLOCK)が参考になるかもしれません。

注1:WITH (< table_hint >)
テーブルスキャンを指定する、クエリオプティマイザが使用する1つ以上のインデックス、
またはクエリオプティマイザーがこのデータテーブルを活用し、この文にロックモードを使う方法もあります。

注2:WITH (NOLOCK) は READ UNCOMMITTED に相当します





先の:データベースのマスタースレーブ遅延はクエリ解決の不正確さを引き起こします
次に:Fiddlerがローカルlocalhost、127.0.0.1ネットワークリクエストをクロールできなかった問題を解決しました
2020年4月5日 14:21:36に投稿 |
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com