2

職場では、ユーザーはReportingServicesのレポートビルダーを使用して独自のレポートを生成できます。

しかし、残念ながら、それが生成するクエリは非常に非効率的であり、「WITH(NOLOCK)」を使用しません-すべての人の速度を低下させます。

これらは、最新のデータを使用して実際に実行する必要があるレポートです。レポートサーバーにオフロードすることはできません。また、非常に具体的で詳細なデータをクエリするため、ここではハイパーキューブは役に立ちません。

したがって、問題は次のとおりです。

レポートビルダーのデータモデルを構成して、テーブルをクエリするときに生成されるクエリが常に「WITH(NOLOCK)」を使用するようにする方法はありますか?

4

2 に答える 2

6

NOLOCKは解決策ではありません。ダーティ リードは一貫性のない読み取りです。合計がずれ、レポートのバランスが取れなくなり、一般にガベージ集計データが生成されます。スナップショット分離を使用して、レポートが更新をブロックしないようにし、更新がレポートをブロックしないようにします。

ALTER DATABASE ... SET READ_COMITTED_SNAPSHOT ON;

詳細については、「データベース エンジンでの行のバージョン管理に基づく分離レベル」を参照してください。

于 2010-12-22T20:44:55.427 に答える
4

レポートのデータ ソースとしてビューを作成with (nolock)し、ビューの select ステートメントですべてのテーブルに追加します。

于 2010-12-22T20:03:52.357 に答える