レポート目的で SQL Server 2005 データベースから大量のデータを取得する必要があります。ストアド プロシージャは 15,000 を超える行を返しています。
アプリケーション(MVC 4.0)からプロシージャを呼び出すと、リクエストがタイムアウトします!!! (データサイズのせいかもしれません)
MVC 4.0 アプリケーションを使用して SQL Server 2005 データベースからこのような膨大なデータを読み取るためのベスト プラクティスはありますか?
レポート目的で SQL Server 2005 データベースから大量のデータを取得する必要があります。ストアド プロシージャは 15,000 を超える行を返しています。
アプリケーション(MVC 4.0)からプロシージャを呼び出すと、リクエストがタイムアウトします!!! (データサイズのせいかもしれません)
MVC 4.0 アプリケーションを使用して SQL Server 2005 データベースからこのような膨大なデータを読み取るためのベスト プラクティスはありますか?
SQL クエリが完了するまでに時間がかかるため、タイムアウトが発生しています。これは、結果のサイズ (15,000 レコードは大量のデータではない) によるものではなく、クエリの実行効率が悪いためです。
いくつかのインデックスが欠落している可能性があります。ストアド プロシージャが間違った方法で記述されている可能性があります。ここからはわかりません。クエリまたはデータベースを最適化してみてください (DBA が利用できる場合は、DBA が役に立ちます。そうでない場合は、Management Studio がヒントを提供してくれます)。
クエリまたはデータベースを最適化できない場合は、他の人が示唆しているように、タイムアウトを増やす必要があります。
私も同じ問題に直面しましたが、1,48,000 件以上のレコードをレンダリングしようとしていました。したがって、これに対する解決策はマルチスレッドを使用することです。データベースからデータをフェッチする 1 つのメソッドがあり、その特定のメソッドを別のスレッドで呼び出します。データは 5 秒以内に読み込まれます。マルチスレッドは、パフォーマンスを低下させずに大量のデータを操作するためにのみ導入されました。
最初の質問は、レポートでデータセットとデータ ソース ビューを使用していない理由です (SQL サーバーでのレポートの場合)。
Reporting Services ではなく、C# コードのみを使用する場合は、ヘルパー関数を作成してみてください。
タイムアウト オプションについては、こちらを参照して ください http://forums.asp.net/t/1040377.aspx
また、コードとSPを最適化するには、ここ にリンクの説明を入力してください
これを最適化するために使用できるヒントをいくつか紹介します。
クエリの最適化 – 何らかの方法でクエリを最適化できるかどうかを確認します。テーブルにインデックスを追加し、where ステートメントなどを確認します。クエリを見てスキーマを知らなければ、特定の推奨事項を実際に提供することはできません。このトピックについて他の人がすでに提案したことを参照してください。
ストアド プロシージャが返すデータの量を制限します。私の推測では、MVC アプリは実際には 15,000 行すべてを必要とするわけではなく、さらに多くの行を必要とします。この投稿をチェックしてください:効率的な方法でページングを実装します。これにより、クエリがそれほど高速化されることはありませんが、アプリがより効率的になります。