Reporting Services には、レポート作成の 3 つの段階があります。
- データの取得 (クエリを実行してデータセットの結果を返す)
- 処理 (レポートのレイアウトに従って、返されたデータをグループ化および集計します)
- レンダリング (HTML、Excel など、選択した出力の生成)
クエリが 20 秒以内にデータを返すが、レポートのレンダリングに 10 分かかる場合、主な問題はレポート処理の速度にあります (レンダリングがパフォーマンスのボトルネックになることはめったにありません)。パフォーマンスを向上させる最善の方法は、ソース データベースで集計を行うようにクエリを書き直して、できるだけ多くの集計をソース データベースにオフロードすることです。通常、データベース プラットフォームは、Reporting Services よりもデータの集計がはるかに高速です。理想的には、レポートに必要な最小量のデータを返し、実行する処理ができるだけ少なくなるようにする必要があります。
ReportServer データベースにアクセスできる場合は、次のクエリを実行して、ボトルネックがどこにあるかを確認します。
SELECT ItemPath, Format, TimeStart, TimeEnd, TimeDataRetrieval, TimeProcessing, TimeRendering, [Status], ByteCount, [RowCount]
FROM ExecutionLog3
WHERE ItemPath LIKE '%My Report Name%'
TimeDataRetrieval、TimeProcessing、および TimeRendering により、問題がどこにあるかが明確にわかります。問題が TimeProcessing にある場合は、クエリを書き直してレポートのデータを減らし、考えられる設計上の問題を調べて、それらのいずれかが当てはまるかどうかを確認します。