3

SQL Server 2012 に大きなテーブルがあり、約 3,400 万のレコードが含まれています。5 分ごとにテーブルを挿入/更新するバッチ プログラムがあり、いつでもテーブルから読み取る Web アプリケーションがあります。

バッチ プログラムがテーブルに書き込むたびに、読み取りが非常に遅くなります。分離レベルと関係があると思いますが、SQL Server にはあまり詳しくないので、どうすれば修正できるかわかりません。

私にとって最良のシナリオは、挿入が読み取りをブロックしないようにすることです。クエリでそれを指定することは可能ですか? または、読み取りクエリを変更して「ダーティ行」を取得する必要がありますか?

アプリケーションは「新鮮な」データに依存する重要ではないため、DB にダーティ リードを許可するように強制できれば問題ありません。しかし、これをどのように達成できるか、またはそれがより良い解決策であるかどうかはわかりません。

4

2 に答える 2

1

簡単な答えと難しい答えがあります。

スナップショット分離をオンにして使用できる場合は、簡単に解決できます。これにより、リーダーのブロッキングと一貫性の問題が解決されます。

それができない場合、問題を解決するのは難しいかもしれませんが、ここには回答するのに十分な情報がありません。

そのため、リーダーにスナップショット分離を使用するようにしてください。使用する前に必ずよく読んでください。

于 2012-11-24T19:29:53.387 に答える
1

確かに、挿入/更新がロックをかけるのを止めることはできません。物事は非常に迅速にうまくいかないでしょう。読み取り操作に分離レベルを設定して、読み取りがコミットされていないことを示すか、選択のヒントとして指定することができます。ただし、データの整合性を失うリスクがある場合、単純にダーティ データを返すのではなく (これには多くの落とし穴があります)、dbms はそれらを完全に無視します。あなたができることは他にもありますが、それについて真剣に考えているなら、SQLサーバーのDBAを取得してください。この種のことは、才能のあるアマチュアレベルをはるかに超えています。

于 2012-11-24T18:21:39.467 に答える