0

今まで見たことのない、かなりユニークな問題に遭遇しました。

顧客には、アプリケーションサーバーとデータベースサーバーがあります。アプリケーションサーバー(win 2008)は、ASP.NETMVC3アプリを実行します。データベースサーバー(Win 2008も)はSQLServer2008を実行します。

データベースへの要求が行われるたびに、w3wp.exeのCPUは最大50〜80%になり、ネットワークトラフィックは2%(10 Gbps)に達します。これには1分ほどかかります。その後、要求されたWebページが表示されます。

実際のLinq実行時間を確認しましたが、データを取得するのに数ミリ秒しかかかりません。

ここにいる専門家の何人かが何が起こっているのかを明らかにしてくれることを願っています。もちろん、それは私のマシンで動作します。

アップデート

SQL Server Management Studio(アプリサーバー上)から実行された828行を取得するクエリでさえ、完了するまでに12秒かかります...したがって、問題はアプリではなく、データベースサーバーまたは接続のどこかにあると思います

update2 これが私が見つけた興味深いものです。

これはスローコードです:

MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IEnumerable<Requests> Entities = DataContext.Requests;

using (profiler.Step("get data")) {
    IEnumerable<Requests> dataset = from x in Entities
                                    where x.ControleStatus == 4
                                    orderby x.ID
                                    select x;
}

しかし、IEnumerableをIQueryableに変更すると、コードは10倍速く実行されます。

MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IQueryable<Requests> Entities = DataContext.Requests.AsQueryable();

using (profiler.Step("get data")) {
    IQueryable<Requests> dataset = from x in Entities
                                   where x.ControleStatus == 4
                                   orderby x.ID
                                   select x;
}

だから私の質問は:IEnumerableとIQueryableの間にこの大きな違いを引き起こしている可能性があるのは何ですか?

4

1 に答える 1

0

Whenever a request to the database is made, CPU for w3wp.exe goes up to 50 - 80 % and network traffic reaches 2% (of 10 Gbps).

  1. Are you taking care of Memory leaks?
  2. Using statements are included in the Database Interaction classes?
  3. I use Red Gate ANTS Memory Profiler to check for the Memory Management Issues.
  4. You are looking for SQL Profiler that tells Reads and Duration.
于 2012-06-13T15:59:30.660 に答える