2009-06-11 7 views
1

私はSQL Server 2008を使用していますが、同じスキーマの2つのテーブルがあり、2つのテーブルの内容を結合して外部アクセスに「テーブル」の単一ビューを提供するビューを作成します。データベースビューのパフォーマンスの問題

テーブルの1つは読み込み専用で、他のテーブルにはバルクの挿入/削除操作が含まれています(他のテーブルでは、数千の行を挿入して別のSQLジョブを実行して、毎日の行)。

私の質問は、他のテーブルが一括挿入/削除操作の下にある場合、外部ユーザーから2つのテーブルのユニオンビューへのアクセスもブロックされるように物理テーブルがロックされるかどうかです。 (私はロックのエスカレーションがこのシナリオで適用されるかどうか考えていますが、行ロックによって最終的にテーブルがロックされ、最終的にビューのアクセスがロックされます)

答えて

2

他のテーブルが一括挿入/外部ユーザーから2つのテーブルの結合ビューへのアクセスもブロックされるように物理テーブルをロックする必要がありますか?

はい、オプティマイザが一括挿入テーブルへのアクセスを含まないクエリを実行する方法を見つけたら、アクセスはブロックされません。

バルクローディング時間を最適化する場合は、読み取り値がthis blog postであることを確認してください。

EDIT

あなたが経験している実際の問題とは何ですか?このビューをどこからでも使用する必要がありますか(たとえば、あるテーブルのデータが必要な場所、ビューを介してクエリを実行している場所など)

いつでも「オンライン」にしたいスナップショットの分離を検討するか、バルクテーブルにフルセットをロードする場合(たとえば、完全なコンテンツが毎日置き換えられる場合)、別のテーブルにデータをロードして、トランザクションでテーブルをsp_renameすることができます。

+0

申し訳ありませんが私の言葉は混乱しています。私は2つの操作を別のテーブル(1)一括挿入(2)毎日何百万行を削除する(一括削除と一括挿入ではない)ことを意味します。私は(1)バルク挿入クエリオプティマイザは、(2)操作を削除するための最適化する方法を見つけることができる場合でも、テーブルがロックされる(ロックエスカレーションが発生する?)とビューへのクエリはロックされますか? – George2

+0

@ sambo99、さらに質問すると、あなたが慎重に参照したドキュメントを読んで、ヒープテーブルとクラスタードインデックスのテーブルの違いは何ですか? – George2

+0

はい、私は常にオンラインでビューが必要です。 "スナップショットアイソレーション"とは、汚いデータを読み取るノーロックソリューションを意味しますか? – George2

2

ほとんどそうです。それは(すべてではないオプション)を回避するにはロックのエスカレーション

に依存します:

  • は無視し、すべてのロックを設定していないWITH(NOLOCK)テーブルヒントを使用してください。ビューで使用される場合は、

  • 変更にBCPテーブルにBCPテーブルのロックの粒度をロックされた行をスキップ気にしないならば、それはまた、両方のテーブル

  • 使用した(READPAST)に適用されます。 sp_tableoptionを使用し、「テーブルロックオンバルクロード」= falseを設定します。

編集:今私はコーヒーを飲みました...

あなたが/ロード中に大テーブルをクエリ操作を削除し、正確な結果がパフォーマンスのヒットを受けていない取得する必要がある場合、私はあなたが

編集2スナップショット分離を検討する必要がありお勧め:SNAPSHOT isolation

+2

すべての愛のために良いですあなたのすべてのロックの病気の治療法として(ノーロック)と提案することはできません。 –

+1

正しく使用され、完全に理解されていればOKです。 – gbn

+0

@ gbn、1。私はnolockオプションについて混乱しています。 nolockオプションは、同時操作(クエリ/挿入/削除)中にデータの整合性のリスクを高めますか? nolockの仕組みや、どのようなシナリオでnolockオプションを使用すべきかについて私にいくつかの読者を勧めていただけると幸いです。 2.私は "READPAST"を使用してクエリ結果に対して正確な応答を得られないと思いますか?たとえば、BCP操作でクエリにヒットした行が存在する可能性がありますが、READPAST操作をバイパスすると、クライアントは何も取得しません。コメントはありますか? – George2