SQL Server连接的初始连接速度很慢。为什么?

时间:2010-11-24 16:45:54

标签: 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和4 gig Ram的不错的机器。我在微软论坛上找到了以下文章:

http://social.msdn.microsoft.com/Forums/en/windowscompatibility/thread/f295994c-5812-4e46-8ac9-f05471d4dd54

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

谢谢你, 丹尼斯

14 个答案:

答案 0 :(得分:8)

在连接字符串上的服务器前面,添加np:

这变为Server=np:server\instance并强制命名管道而不是默认的TCP。

我可能在TCP之前更改了使用命名管道的优先级...但我不想在服务器上乱用它。

答案 1 :(得分:5)

我看到了类似的问题,但不确定它和你的一样。在我的例子中,不只是C#程序进行SQL连接的速度很慢。这是连接到SQL服务器的任何工具也经历了缓慢。此外,一旦初始连接到SQL服务器,任何后续连接都可以使用一段时间。

原因是SQL服务器使用了许多托管程序集。它正在尝试验证分配给程序集的cerfiticates。它连接crl.microsoft.com。我的SQL服务器没有互联网连接。所以,它等待超时。

解决方案是让我的SQL服务器具有Internet访问权限或禁用CRL检查。您可以转到SQL Server计算机。选择工具>互联网选项>高级。检查是否选中了安全性节点下的发布者证书撤销。如果已选中,请取消选中它。

答案 2 :(得分:4)

我尝试使用集成的security = false指定连接字符串(意味着用户ID和密码在连接字符串中)并且加密= false(只是100%确保未使用SSL加密)。这些规范似乎没有帮助,我无法使用TCP / IP网络库(NetworkLibrary =“dbmssocn”)明确获得连接。这可能与服务器防火墙和端口未打开有关。我切换回命名管道,并将命名管道网络库规范放在连接字符串中(NetworkLibrary =“dbnmpntw”)。在此更改后,即时连接。

答案 3 :(得分:1)

是的,当你使用集成安全性时,Active Directory可能是责任,也是整个网络,因为它完全取决于它。我能想到的另一件事是你正在使用的SQL Server版本。

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

答案 4 :(得分:1)

你确实检查过我明白了吗? UDP端口1434在防火墙上打开,浏览器服务正在运行....否则需要大约40秒进行身份验证。

答案 5 :(得分:1)

Establishing an integrated security connection to SQL Server using the IP address (instead of a host name), will prevent Kerberos authentication being used. In this scenario check the connection between the SQL Server and the domain controller.

If you connect using the host name (not the IP Address) Kerbos is in play, in this case you need to check the client machine's connection to the domain controller.

答案 6 :(得分:0)

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

的教程

sqlconnection myCon = new sqlconnection(details);

myCon.Open()

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

答案 7 :(得分:0)

我没有具体的答案,但您是否尝试过运行SQL事件探查器以查看SQL的观点?

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

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

祝你好运。

答案 8 :(得分:0)

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

作为一项实验,尝试从客户端框中ping服务器 - 如果这需要很长时间来解析主机名,那么您就找到了罪魁祸首:主机名查找(DNS或NBNS)。另一种方法是使用主机IP地址而不是名称。因此,如果您在服务器bob上拥有sql2005-01的SQL Server命名实例,并且此服务器的IP为192.168.200.12,请尝试连接到192.168.200.12\bob而不是{ {1}}。

身份验证更难以解决,但您可以在SQL服务器框上使用runas对其进行测试(例如sql2005-01\bob,以查看是否可以打开命令提示符,因为您尝试的用户认证为。

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

我们遇到了同样的问题,原来我们的远程托管的Active Directory服务器应该受到责备。

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

我希望有所帮助。

答案 11 :(得分:0)

如果您遇到此问题,请参阅打击解决方案:

根本原因

我们在Win7 VDI上看到的问题可能是由于网络硬件设备与机器连接。如果网络设备不支持TCP / IP扩展,那么性能将会很慢。

解决方案

禁用TCP的自动调整级别。请按照以下步骤操作: 1)打开命令提示管理员权限(以管理员身份运行) 2)输入“netsh interface tcp set global autotuninglevel = disabled” 3)运行上述命令后重启机器。

有关此命令的其他信息,请访问链接“http://support.microsoft.com/kb/935400”

答案 12 :(得分:0)

我遇到了同样的问题。经过对google和stackoverflow的大力研究后,我更改了客户端计算机的主机文件(在Windows中,位于C:\ Windows \ System32 \ drivers \等)。我输入了我主机的IP地址和服务器名称在这个文件和Viola!。事情变得超级快! 就像stackoverflow中的每个人都说的那样,计算机在DNS服务中查找servername的地址并获得超时。 我做的步骤如下。如果没有别的办法,请试一试。

  

如何加入主办文件

1.打开命令提示符并ping远程数据库所在的服务器。为此,请输入以下命令:

ping servername

这里我的远程计算机名称是Juno。所以我应该像这样ping。

ping Juno

此命令将ping我的服务器并返回这样的ip地址。

Pinging Juno [192.168.0.3] with 32 bytes of data:

正如您所看到的,服务器的IP地址位于括号之间。 复制IP地址。

2.现在使用提升的记事本打开Hosts文件(以管理员身份运行)。

在hosts文件的末尾,会有一些这样的行:

    #localhost name resolution is handled within DNS itself.
    #   127.0.0.1       localhost
    #   ::1             localhost

在最底层(此处,在localhost之后),键入#并输入我们刚刚获得的服务器的IP地址,然后输入服务器名称。 因此,hosts文件应如下所示。

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
#   169.254.63.1    Juno
  1. 现在保存hosts文件并重新启动客户端PC。 (对我来说,它可以立即工作而无需重启。)
  2. 你去吧!

    For more info about editing your hosts file,click here

答案 13 :(得分:0)

就我而言,答案是:

  • 尝试一切没有结果。
  • 远程桌面到(非prod)SQL Server以仔细检查设置。
  • 在执行快速SSIS作业后关闭运行的Visual Studio。
  • 去一个安静的地方踢自己。