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

我遇到了在两个站点安装了C#应用程序的情况,其中与SQL Server的初始连接非常慢。 我编写了一个测试应用程序来validation减速发生的位置,它位于第一个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是通过路由器完成的,而不是实际的服务器。 到目前为止,这只发生在两个地方,其他地方没有任何问题。 任何帮助,将不胜感激。

谢谢你,丹尼斯

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

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

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

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

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

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

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

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

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

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

还有其他创建SQL数据库连接的方法。 尝试找一个使用该教程的教程

sqlconnection myCon = new sqlconnection(details);

 myCon.Open() 

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

我没有具体的答案但您是否尝试过运行SQL事件探查器来查看从SQL的角度来看是怎么回事?

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

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

祝好运。

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

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

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

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

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

我们遇到了同样的问题,结果certificate我们的远程托管的Active Directory服务器是罪魁祸首。

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

我希望有所帮助。

如果你正面临这个问题,请参阅打击分辨率:

根本原因

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

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

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

我有同样的问题。 经过对google和stackoverflow的大力研究后,我更改了客户端计算机的主机文件(在Windows中,位于C:\ Windows \ System32 \ drivers \等)。我在此文件和Viola中输入了主机的IP地址和服务器名称。 事情变得超级快! 就像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。 (对我来说,它可以立即工作而无需重启。)

你去吧!

有关编辑主机文件的更多信息,请单击此处

就我而言,答案是:

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

使用IP地址(而不是主机名)建立到SQL Server的集成安全连接将阻止使用Kerberos身份validation。 在此方案中,检查SQL Server和域控制器之间的连接。

如果使用主机名(而不是IP地址)进行连接,则Kerbos正在运行,在这种情况下,您需要检查客户端计算机与域控制器的连接。