【发布时间】:2012-01-10 17:06:38
【问题描述】:
(对不起,如果这是一个很长的问题,据说是具体的)
我工作的公司有很多网站,这些网站已经运行了一段时间,没有出现任何问题。这些应用程序是 ASP.NET 2.0、3.5 和 4.0 的混合体,都使用 ADO.NET 连接到 SQL Server Standard 实例(在同一网络服务器上),所有这些实例都由 IIS7 托管。
当我们迁移到升级的网络服务器时,问题就开始了。我们尽一切努力使用完全相同的设置设置服务器、数据库实例和 IIS(除了不同的机器名称,以及我们从 SQLExpress 升级到标准的事实),据我们所知,我们做到了.两台服务器都运行 Windows Server 2008 R2(应用了所有当前更新),并获得了默认安装。
在启动这些应用程序之一时,问题非常明显。当您到达我们应用程序的登录页面时,页面本身的加载速度非常快。即使您从不可能缓存页面的新机器加载页面也是如此,并且禁用了 IIS 缓存。当您输入登录信息并单击登录按钮时,问题实际上是可见的。由于我们数据库的(不是很好)设计,登录过程必须访问多个数据库,理论上最多150个单独的数据库,但实际上通常是2个。即使只打开2个数据库(最少)也会出现问题。不是一个伟大的设计,但我们现在必须接受它。
当尝试最初打开与数据库的连接时,整个过程每次都会停止大约 20 秒,无论您是连接到 2 个 dbs 还是 40 个。我已经针对进程,我可以从中获取的唯一信息是对 sqlconnection.open() 的一个或所有调用占了 90% 的时间。这只发生在第一次使用应用程序时,但问题是由于 IIS 似乎无视我们为其设置的回收设置,并在空闲几分钟后回收应用程序,导致问题再次发生。 .
我还尝试使用 SQL Server 分析器来查看导致速度下降的数据库操作,但由于所有其他数据库活动(以及我必须在生产服务器上执行此操作的事实,因为在我们的测试环境中不会出现问题)我无法确定导致停止的确切操作。我将尝试在深夜进来并关闭生产站点以运行 SQL 分析器,但我可能无法立即执行此操作。
在研究这个问题的过程中,我尝试了几个解决方案
认为这可能是名称解析问题,我尝试修改网络服务器上的两个主机文件,并为连接字符串提供 IP 地址而不是要解析的服务器名称,没有区别。我听说 LLMNR 协议会导致这样的问题,但我认为尝试通过 IP 连接或使用主机文件解析应该可以消除这种可能性,但我承认我从未尝试过真正关闭 LLMNR。
我在 IIS 中增加了空闲超时、回收间隔等,但这似乎并没有得到尊重,更不用说解决问题了。这让我相信有一个设置覆盖了机器上的 IIS 应用程序设置。
多个其他代码修复,没有任何区别。是 SqlServer 设置导致问题吗?
我现在忘记的其他东西。
任何想法、经验或任何东西都将非常感谢帮助我解决这个问题!
【问题讨论】:
-
您是否尝试连接到旧的 SQLExpress DB 只是为了查看速度是否存在差异?仅连接到 1 db 作为测试(简单的 SQL 内容)怎么样?
-
不幸的是,我们没有连接到旧实例的选项。一旦我们让新服务器启动并正常工作,旧服务器就会被格式化并重新用于其他用途。即使该实例仍然存在,我们系统的物理部署也不允许我连接到旧服务器,而不需要在两端的防火墙中进行处理等等。
标签: c# .net sql-server iis