Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET web应用程序的性能突然下降;需要数据库索引吗?_Asp.net_Sql Server_Performance_Asp.net 2.0 - Fatal编程技术网

ASP.NET web应用程序的性能突然下降;需要数据库索引吗?

ASP.NET web应用程序的性能突然下降;需要数据库索引吗?,asp.net,sql-server,performance,asp.net-2.0,Asp.net,Sql Server,Performance,Asp.net 2.0,我有一个ASP.NET 2.0 web应用程序,它由一个非常复杂的SQL Server数据库支持(大量的表和大量的连接发生在大量的查询中)。我的日志显示,有一天,某一特定页面类型的服务器端加载时间显著增加。它通常在100毫秒以下,但有时会在200毫秒左右上升,然后上升到600毫秒以上,从那时起就一直存在(就在一周前)。上一次我们将新代码迁移到生产环境是在这之前的两周,当时没有大量的新数据输入到系统中 我在我们的测试环境中查看了这种行为不端的页面类型(当然,它没有生产环境那么健壮),发现它的平均速

我有一个ASP.NET 2.0 web应用程序,它由一个非常复杂的SQL Server数据库支持(大量的表和大量的连接发生在大量的查询中)。我的日志显示,有一天,某一特定页面类型的服务器端加载时间显著增加。它通常在100毫秒以下,但有时会在200毫秒左右上升,然后上升到600毫秒以上,从那时起就一直存在(就在一周前)。上一次我们将新代码迁移到生产环境是在这之前的两周,当时没有大量的新数据输入到系统中

我在我们的测试环境中查看了这种行为不端的页面类型(当然,它没有生产环境那么健壮),发现它的平均速度大约为450ms,这比我想要的要高,但没有生产环境那么高。这很奇怪;我希望测试环境的运行速度比生产环境慢,因为它们拥有基本相同的数据集

我把范围缩小到一个数据库调用(一行C#),调用一个存储过程并将结果组装到.NET对象(绝大多数时间在DB中)需要将近200毫秒的时间。我启动了存储过程,复制了它的主体,并让SQL Server Manager告诉我估计的执行计划。它告诉我有一个缺失的非聚集索引,是我创建的;这使得有关数据库调用的时间低于100毫秒。更多的调查表明,在该页面类型上没有其他显著的性能下降

因此,我对一些东西做了一些改进,我想在生产环境中创建索引,看看页面加载时间是否显著减少。但我仍然有一些问题困扰着我,在我在生产中胡闹之前,我更愿意回答这些问题:

  • 为什么性能会突然下降?如果它只是一个缺少的索引,我希望它一直都是一个因素(随着更多数据的添加,性能会慢慢下降)
  • 如果有相同的数据集,为什么测试的性能会比生产更好
我知道没有人能告诉我关于我的应用程序的情况,但我希望能了解到什么样的东西可以像那样改变,并且是特定于安装的


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

MSSQL中执行计划的性能很难预测。可能丢失的索引会随着表大小的平方而增加执行时间。这会让它看起来像是在工作,工作,工作,然后突然变得非常缓慢

如果ManagementStudio指出缺少索引,则应将其(或其他更智能的索引)添加到生产环境中


不过,由ASP页运行的sp的100毫秒还是相当长的。如果页面被大量使用,请尝试优化sp。

如果行数越少意味着db服务器的工作量越少,那么我希望您的测试环境的性能越好。突然的变化可能是因为查询优化器在某个时候选择使用新的执行计划。可能是由于行的大小/数量,突然之间旧的计划不再可行,查询优化器不得不选择一个新的策略。@KirkWoll:我更新了这个问题,注意到测试环境与生产环境具有相同的数据,加上少量的测试数据。我更新了问题,注意到测试环境与生产环境的数据集基本相同。