まず最初に、非常に大規模で長時間実行されるレポートを実行するのは恐ろしい考えであることを理解しています。Microsoft には、SSRS レポートの実行に 30 秒以上かかるべきではないという経験則があることは承知しています。ただし、州法を遵守するなどの外部の力により、巨大なレポートが好まれる悪である場合があります。
私の職場には、Crystal Reports から SSRS に移行した asp.net (2.0) アプリがあります。大規模なユーザー ベースと複雑なレポート UI 要件のため、ユーザーが入力したパラメーターを受け入れ、夜間に実行されるスケジュールを作成する一連の画面があります。アプリケーションは複数のレポート フレームワークをサポートしているため、SSRS のスケジューリング/スナップショット機能は使用しません。システム内のすべてのレポートは、スケジュールされたコンソール アプリによって生成されます。このアプリは、ユーザーが入力したパラメーターを取得し、レポートが作成された対応するレポート ソリューションを使用してレポートを生成します。SSRS レポートの場合、コンソール アプリは SSRS レポートを生成し、SSRS Web サービス API を介して PDF としてエクスポートします。
最近 Crystal レポートから SSRS に変換した特定の 25,000 ページのレポートを除いて、これまでのところ、SSRS は Crystal よりもはるかに扱いが簡単でした。SSRS サーバーは、SSRS 2005 を実行する 32 GB の RAM を備えた 64 ビット 2003 サーバーです。小さなレポートはすべて素晴らしく機能しますが、このような大きなレポートには問題があります。残念ながら、Web サービス API を使用して事前レポートを生成することはできないようです。次のエラーは、生成/エクスポートの約 30 ~ 35 分後に発生します。
例外メッセージ: 基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。
Web サービス呼び出しは、皆さんが以前に見たことがあると確信しているものです。
data = rs.Render(this.ReportPath, this.ExportFormat, null, deviceInfo,
selectedParameters, null, null, out encoding, out mimeType, out usedParameters,
out warnings, out streamIds);
奇妙な点は、レポート マネージャーを使用してレポート サーバー上でレポートを直接実行すると、このレポートが実行/レンダリング/エクスポートされることです。レポートのデータを生成するプロセスは、約 5 分間実行されます。レポートは、約 12 分後にブラウザー/ビューアーに SSRS ネイティブ形式で表示されます。レポート マネージャーのブラウザー/ビューアーを使用して PDF にエクスポートするには、さらに 55 分かかります。これは確実に機能し、なんと 1.03 GB の pdf が生成されます。
以下は、Web サービス API を介してレポートを機能させるために私が試みた、より明白なことのいくつかです。
- レポート サーバーで HttpRuntime ExecutionTimeout 値を 3 時間に設定します。
- レポート サーバーで HTTP キープ アライブを無効にしました
- レポート サーバーのスクリプト タイムアウトを増やしました
- レポートがサーバーでタイムアウトしないように設定する
- クライアント呼び出しでレポートのタイムアウトを数時間に設定する
私が試した微調整から、タイムアウトの問題はすべて解消されたと言ってよいでしょう。
エラー メッセージを調査したところ、Web サービス API はデフォルトではチャンクされた応答を送信しないと思われます。これは、1 回の応答ですべての 1.3 GB を回線経由で送信しようとすることを意味します。ある時点で、IIS はタオルを投げます。残念ながら、API は Web サービスの構成を抽象化するため、応答のチャンクを有効にする方法を見つけることができないようです。
- 総ページ数を減らさずにPDFエクスポートフェーズやPDFのサイズを縮小/最適化する方法を知っている人はいますか?
- SSRS の応答チャンクを有効にする方法はありますか?
- なぜこれがサーバー上で実行され、APIを介して実行されないのかについて、他の誰かが他の理論を持っていますか?
編集: kcrumley の投稿を読んだ後、ファイル サイズ/ページ数を取得して、平均ページ サイズを調べ始めました。興味深いことに、小さなレポートでは、各ページが約 5K になるように計算されます。興味深いことに、レポートが大きくなると、この「平均」が増加します。たとえば、8000 ページのレポートは平均 40K/ページを超えています。非常に奇妙な。また、各グループの最後のページを除いて、ページごとのレコード数が設定されているため、一部のページに別のページよりも多くのレコードがある場合はありません。