5

これのトラブルシューティングに何時間も費やしましたが、新しい視点が必要です。. .

SSRS には比較的単純なレポート設定があり、上部に列があり、データ ポイントが下にある単純なマトリックスです。レポートの背後にある SQL クエリは「中程度」の複雑さです。いくつかのサブクエリといくつかの結合がありますが、それほどおかしなことはありません。

レポートは何ヶ月もうまく機能していましたが、最近は本当に遅くなりました。たとえば、レポートの生成に 15 ~ 20 分かかります。Report Designer から SQL Mgmt Studio に SQL クエリをクリップ アンド ペーストし、必要な変数を置き換えると、2 秒以内に結果が返されます。SQLプロファイラーを使用して、SSRSが実行している正確なクエリを取得し、これをクリップしてMgmt Studioに貼り付けましたが、それでも同じで、1秒未満の結果でした. 指定されたパラメーターと日付範囲に違いはありません。小さなデータセット (< 100 行) または巨大なデータセット (> 10,000 行) を返すようにパラメーターを設定しても、同じ結果が得られます。Mgmt Studio では超高速ですが、SSRS レポートの生成には 20 分かかります。

これまでに試みたトラブルシューティング: SSRS でレポートを削除して再展開しました。複数のマシンと SSRS サーバーの Visual Studio IDE でテストし、同じ速度 (約 20 分) でテストしました。 Mgmt Studio -- Mgmt Studio で高速に実行 (< 2 秒) レポートの実行中にサーバーのパフォーマンスを監視しました。プロセッサは 20 分間のレポート生成中にかなりの負荷がかかり、ディスク I/O はベースラインをわずかに上回っています

4

2 に答える 2

6

両方の実行プランをチェックして、パラメータースニッフィングの組み合わせやset_optionsの違いによって、2つの個別の実行プランが生成されていないことを確認します。

これは、ADO.NetおよびSSMSからクエリを実行するときに遭遇したシナリオです。この問題は、さまざまなオプションを使用するとさまざまな実行プランが作成されたときに発生しました。SQL Serverは、渡されたパラメーター値を使用して、生成された実行プランをさらに最適化しようとします。生成された実行プランごとに異なるパラメーター値が使用され、最適なプランと準最適なプランの両方が得られたことがわかりました。現在、これを確認するための元のクエリは見つかりませんが、すばやく検索すると、同じ問題に関連するこの記事が見つかります。

http://www.sqlservercentral.com/blogs/sqlservernotesfromthefield/2011/10/25/multiple-query-plans-for-the-same-query_3F00_/

SQL Server 2008を使用している場合は、「OPTIMIZE FOR UNKNOWN」と呼ばれるクエリヒントを介して提供される代替手段もあります。これは、基本的にパラメータスニッフィングを無効にします。以下は、この機能に関する私の最初の調査を支援した記事へのリンクです。

http://blogs.msdn.com/b/sqlprogrammability/archive/2008/11/26/optimize-for-unknown-a-little-known-sql-server-2008-feature.aspx

2008より前のバージョンの上記の代わりに、プロシージャ内のローカル変数にパラメータ値を格納することもできます。これは、上記のクエリヒントと同じように動作します。このヒントは、以下の記事(編集中)からのものです。


編集

もう少し検索すると、何か役に立つ場合に備えて、主題の非常に詳細な分析を含む記事が発掘されました。以下のリンクを参照してください。

http://www.sommarskog.se/query-plan-mysteries.html

于 2012-11-02T19:37:53.717 に答える
5

この問題は私たちにとっても問題でした。CRM 2011 から SSRS レポートを実行しています。提案された多くの解決策 (入力パラメーターをローカル変数にマッピングし、WITH RECOMPILE をストアド プロシージャに追加する) を試してみましたが、うまくいきませんでした。

レポート サーバー アプリケーションのメモリ構成に関するこの記事 ( http://technet.microsoft.com/en-us/library/ms159206.aspx )、具体的には、RSReportServer.config ファイルに 4000000 の値を追加することで問題が解決しました。

レンダリングに 30 ~ 60 秒かかるレポートが 5 秒未満で完了するようになりました。これは、SSMS で基になるストアド プロシージャの実行にかかる時間とほぼ同じです。

于 2013-09-11T18:09:22.610 に答える