C# 与SQL Server的初始连接速度较慢。为什么?

C# 与SQL Server的初始连接速度较慢。为什么?,c#,sql-server-2005,ado.net,connection,C#,Sql Server 2005,Ado.net,Connection,我遇到过这样的情况:在两个站点上安装了一个C#应用程序,在这两个站点上,与SQL Server的初始连接速度非常慢。我编写了一个测试应用程序来验证减速发生的位置以及它在第一个SQLConnection.Open语句中的位置。通过命名管道与服务器建立连接大约需要41秒。我们认为这可能是一个DNS问题,但使用TCP/IP连接时速度同样慢。在建立初始连接后,连接被池化,应用程序正常响应。工作站和服务器都是运行Windows 7 Pro、Core 2 Duo 3.16 Ghz和4G Ram的体面机器。我

我遇到过这样的情况:在两个站点上安装了一个C#应用程序,在这两个站点上,与SQL Server的初始连接速度非常慢。我编写了一个测试应用程序来验证减速发生的位置以及它在第一个SQLConnection.Open语句中的位置。通过命名管道与服务器建立连接大约需要41秒。我们认为这可能是一个DNS问题,但使用TCP/IP连接时速度同样慢。在建立初始连接后,连接被池化,应用程序正常响应。工作站和服务器都是运行Windows 7 Pro、Core 2 Duo 3.16 Ghz和4G Ram的体面机器。我确实在microsoft论坛上找到了以下文章:

关闭LLMNR协议确实将初始连接时间缩短了约一半至21秒。但是,要获得到SQL Server的初始连接,这仍然需要很长时间。唯一与我们的标准略有不同的是,在这种情况下,DNS是通过路由器而不是实际的服务器完成的。到目前为止,这只发生在两个地方,其他地方没有问题。任何帮助都将不胜感激

谢谢,,
Dennis

我尝试使用integratedsecurity=false(意味着用户id和密码在连接字符串中)和encrypt=false(100%确保未使用SSL加密)指定连接字符串。这些规范似乎没有帮助,我无法使用TCP/IP网络库(NetworkLibrary=“dbmsscon”)显式地获得连接。这可能与服务器防火墙和端口未打开有关。这次我切换回命名管道,并将命名的管网库规范放入连接字符串中(NetworkLibrary=“dbnmpntw”)。更改后,立即建立连接。

还有其他方法可以创建到SQL数据库的连接。尝试查找使用

sqlconnection myCon=新的sqlconnection(详细信息)


而不是创建一个对象来实例连接。

我没有一个具体的答案,但是您是否尝试过运行SQL Profiler,从SQL的角度来看发生了什么

您是否也尝试过使用与连接相同的凭据连接到SQL

另一方面,它可能都是低得多的水平,但我总是做容易检查的东西第一


祝你好运。

听起来要么名称解析需要一段时间,要么身份验证需要一段时间。在初始解析或身份验证发生后,服务器缓存端点的详细信息,因此在缓存过期之前不需要再次执行查找

作为一个实验,尝试从客户机框ping服务器——如果这需要很长时间来解析主机名,那么您已经找到了罪魁祸首:主机名查找(DNS或NBN)。另一种选择是使用主机IP地址而不是名称。因此,如果您在服务器
sql2005-01
上有一个名为
bob
的SQL Server实例,并且该服务器的IP为
192.168.200.12
,那么请尝试连接到
192.168.200.12\bob
,而不是
sql2005-01\bob


身份验证更难解决,但您可以在SQL server上使用runas进行测试(例如,
runas/user:domain\user cmd
,查看您是否可以作为尝试进行身份验证的用户打开命令提示符。

连接或身份验证很容易出现问题,第一次连接需要更长的时间是正常的,因为ADO.NET有连接池,以避免连接时间过长。

> 影响速度的因素有很多: -TCP/IP配置 -服务器端路由器
-等等。

我们也遇到了同样的问题,结果证明是我们的远程托管Active Directory服务器造成的

我们创建了一个站点本地Active Directory服务器来复制远程托管的AD主服务器,然后所有缓慢的SQL server集成安全身份验证性能问题都消失了


我希望这会有所帮助。

我看到了类似的问题,但不确定它是否与您的问题相同。在我的情况下,不仅仅是C#程序进行SQL连接的速度慢。连接到SQL server的任何工具也会遇到这种速度慢的问题。此外,一旦与SQL server建立了初始连接,任何后续连接都会在一段时间内正常时间的问题

原因是SQL server正在使用多个托管程序集。它正在尝试验证分配给程序集的证书。它正在连接crl.microsoft.com。我的SQL server没有internet连接。因此,它等待超时


解决方案是使我的SQL server具有internet访问权限或禁用CRL检查。您可以转到SQL server计算机。选择“工具”>“internet选项”>“高级”。检查是否选中了secuity节点下的发布者证书吊销。如果选中了,请取消选中。

是的,当您使用集成安全性时,Active Directory可能是罪魁祸首,也是整个网络的罪魁祸首,因为它完全依赖于它。我可以想到的另一件事是您使用的SQL Server版本


另外,当SQL Server长时间不使用时,它的行为类似于IIS,使工作进程处于休眠状态,因此当您再次联系服务器时,这取决于机器(我们可以看到这些机器具有桌面机器配置),当辅助进程恢复正常并准备好工作时,这将需要一段时间。

如果您仍面临此问题,请参阅解决方案:

根本原因 我们在Win7 VDIs上看到的问题可能是由于与机器连接的网络硬件设备造成的。如果网络设备不支持TCP/IP扩展,则性能将变慢

解决方案 禁用TCP的自动调整级别。请遵循
myCon.Open()
ping servername
ping Juno
Pinging Juno [192.168.0.3] with 32 bytes of data:
    #localhost name resolution is handled within DNS itself.
    #   127.0.0.1       localhost
    #   ::1             localhost
# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
#   169.254.63.1    Juno