ASP.NET Web应用程序突然性能下降; DB索引需要吗?

时间:2012-03-08 17:55:56

标签: asp.net sql-server performance asp.net-2.0

我有一个由相当复杂的SQL Server数据库支持的ASP.NET 2.0 Web应用程序(在许多查询中发生了大量的表和许多连接)。我的日志显示,有一天,某个特定页面类型的服务器端加载时间显着增加。它通常低于100毫秒,但有时大约在200毫秒之前,它已经达到600毫米以上并且一直存在(仅仅一周前)。我们之前将新代码迁移到生产中的时间差不多是在此之前两周,并且在该日期没有大量新数据投入系统。

我在我们的测试环境中查看了这种行为不当的页面类型(当然,它不如生产那么强劲)并且看到它的平均值大约为450毫秒,这比我想要的高,但不如生产高。那真是怪了;我希望测试环境的运行速度比生产慢,因为它们的数据集基本相同。

我把它缩小到一个数据库调用(一行C#),它接近200ms来调用存储过程并将结果汇​​总到.NET对象中(大部分时间都在数据库中)。我拉起那个sproc,复制了它的主体并让SQL Server Manager告诉我估计的执行计划。它告诉我,我创建了一个缺少的非聚集索引;这使得数据库调用的时间低于100毫秒。更多的调查表明,该页面类型没有其他重要的性能下降。

所以我稍微改进了一些东西,我很想在生产中创建该索引,看看页面加载时间是否显着减少。但是我仍然有一些问题让我感到烦恼,而且在生产过程中我更愿意回答:

  • 为什么性能会突然下降?如果它只是一个缺失的索引,我认为它一直是一个因素(随着更多数据的添加,性能逐渐下降)。
  • 如果测试的数据集相同,为什么测试的效果会好于生产?

我知道没有人可以告诉我有关我的应用程序的信息,但我希望能够深入了解哪些类型的内容可能会发生变化并且是特定于安装的。

编辑:我将索引添加到生产中,它将页面加载时间缩短到大约100毫秒。我还是不太明白发生了什么事;也许有一天,当我学到一些看似与数据库和SQL无关的东西时会点击。

1 个答案:

答案 0 :(得分:1)

MSSQL中执行计划的性能很难预测。可能缺少的索引将使用表的大小的平方来增加执行时间。这会使它看起来像工作,工作,工作,然后突然变得非常缓慢。

如果管理工作室指示缺少索引,那么您应该将它(或另一个,甚至更智能的索引)添加到生产环境中。

然而,ASP页面的sp运行100ms仍然很长。如果页面被大量使用,请尝试优化sp。