w3wp.exe数据库调用高网络

时间:2012-06-13 15:21:51

标签: sql-server asp.net-mvc-3 sql-server-2008

我遇到了一个我以前没见过的相当独特的问题。

客户拥有应用程序服务器和数据库服务器。应用程序服务器(win 2008)运行ASP.NET MVC 3应用程序。数据库服务器(也是Win 2008)运行SQL Server 2008。

每当向数据库发出请求时,w3wp.exe的CPU上升到50-80%,网络流量达到2%(10 Gbps)。这需要一分钟左右的时间,然后显示请求的网页。

我检查了Linq的实际执行时间,只需几毫秒即可获取数据。

我希望这里的一些专业人士能够了解正在发生的事情。当然,它适用于我的机器。

更新

即使是从SQL Server Management Studio(在应用服务器上)执行的检索828行的查询也需要12秒才能完成...所以我猜问题不是应用程序而是数据库服务器或连接上的某个地方

更新2 这是我发现的一些有趣的东西。

这是慢代码:

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之间的这个巨大差异?

1 个答案:

答案 0 :(得分:0)

  

每当对数据库发出请求时,w3wp.exe的CPU都会上升   到50-80%,网络流量达到2%(10 Gbps)。

  1. 你在处理内存泄漏吗?
  2. 使用语句包含在数据库交互类中吗?
  3. 我使用Red Gate ANTS Memory Profiler检查内存管理问题。
  4. 您正在寻找能够告诉ReadsDuration
  5. 的SQL事件探查器