c# - ASP.NET 2.0-4.0 Web 应用程序的初始启动速度极慢。

标签 c# .net sql-server iis

(对不起,如果这是一个很长的问题,它说得很具体)

我工作的公司有许多站点,这些站点已经运行了一段时间没有出现问题。这些应用程序是 ASP.NET 2.0、3.5 和 4.0 的混合体,它们都使用 ADO.NET 连接到 SQL Server Standard 实例(在同一网络服务器上),所有这些实例都由 IIS7 托管。

当我们迁移到升级后的网络服务器时,问题就开始了。我们尽一切努力使用完全相同的设置来设置服务器、数据库实例和 IIS(除了不同的机器名称,以及我们已经从 SQLExpress 升级到 Standard 的事实),据我们所知,我们做到了.两台服务器都运行 Windows Server 2008 R2(应用了所有当前更新),并收到了默认安装。

启动这些应用程序之一时,问题非常明显。当您到达我们应用程序的登录页面时,页面本身加载速度非常快。即使当您从不可能缓存页面的新机器加载页面时也是如此,并且禁用了 IIS 缓存。当您输入登录信息并单击登录按钮时,问题实际上是可见的。由于我们数据库的(不是很好)设计,登录过程必须访问多个数据库,理论上最多 150 个独立的数据库,但实际上通常是 2 个。即使只打开 2 个数据库(最少)也会出现问题。这不是一个很好的设计,但我们现在必须接受它。

当尝试最初打开与数据库的连接时,无论您是连接到 2 个数据库还是 40 个数据库,整个过程每次都会停止大约 20 秒。我已经针对进程,我可以从中获取的唯一信息是对 sqlconnection.open() 的一个或所有调用占了 90% 的时间。这只发生在首次使用应用程序时,但由于 IIS 似乎无视我们为其设置的回收设置,并在闲置几分钟后回收应用程序,导致问题再次出现,这使问题更加复杂.

我还尝试使用 SQL Server 探查器来查看哪些数据库操作是导致速度下降的原因,但由于所有其他数据库事件,(事实上我必须在我们的生产服务器上执行此操作,因为在我们的测试环境中没有出现问题)我无法确定导致停止的确切操作。我将尝试在深夜回来并关闭生产站点以运行 SQL 分析器,但我可能无法立即执行此操作。

在研究问题的过程中,我尝试了几个解决方案

  • 认为这可能是一个名称解析问题,我尝试修改网络服务器上的主机文件,并为连接字符串提供一个 IP 地址而不是要解析的服务器名,但没有任何区别。我听说 LLMNR 协议(protocol)会导致此类问题,但我认为尝试通过 IP 连接或使用主机文件解析应该可以消除这种可能性,但我承认我从未尝试过实际关闭 LLMNR。

  • 我已经增加了 IIS 中的空闲超时、回收间隔等,但这似乎并没有得到尊重,更不用说解决问题了。这让我相信有一个设置覆盖了机器上的 IIS 应用程序设置。

  • 多个其他代码修复,均无任何影响。是 SqlServer 设置导致了问题吗?

  • 我现在忘记的其他内容。

任何想法、经验或任何帮助我解决这个问题的人都将不胜感激!

最佳答案

如果您仍在本地计算机上运行 SQL 实例,我建议您使用非 tcp 连接。 SQL Server 支持多种协议(protocol),tcp、命名管道和共享内存是比较常见的。

命名管道

Data Source=np:computer\instance

共享内存

Data Source=lpc:computer\instance

我个人更喜欢共享内存。请记住,您需要启用这些协议(protocol),为避免配置错误,我建议您禁用所有不使用的协议(protocol)。

参见 http://msdn.microsoft.com/en-us/library/ms187892.aspx

IIS 重置

在 IIS7 中有两种配置空闲超时的方法。两者都从单击“应用程序池”部分并右键单击相应的应用程序域开始。如果单击“回收...”选项,则有一项设置。另一个是在“进程模型”部分下的“高级设置...”中,您会发现设置为零的“空闲超时(分钟)”会禁用进程超时。后一种选择对我们有用。

如果我是你,我会首先解决这个问题,因为即使你没有 20 秒的延迟,重启应用程序域和/或工作进程总是很痛苦。

关于c# - ASP.NET 2.0-4.0 Web 应用程序的初始启动速度极慢。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807331/

相关文章:

c# - SQL Server 项目的进程间通信

c# - WPF 如何在文本框中使用验证规则而不创建额外的属性以绑定(bind)到对话框中?

c# - 如果var为null c#,如何忽略

.net - @item.BodyText 在 MVC3 中不是原始格式

c# - moq:使用 Setup() 时,如何确定方法参数的相等性?

c# - 如何将 Asp.net 网站转换为 Asp.net Web 应用程序?

c# - 调整我的搜索功能

java - SQL 准备语句;我做对了吗?

sql - 如何在 SQL Server 2014 中获取具有最高日期的记录?

c# - SQL 和 RAM...如何在不卡住应用程序的情况下更新 2000 条记录