使用Windows身份验证时,SQL Server Management Studio连接缓慢或超时


23

尝试使用Windows身份验证通过TCP连接到SQL Server 2012实例时,SQL Server Management Studio 2014出现了非常长的延迟(10〜30秒)。连接对象资源管理器或新的空白查询窗口时,会发生这种情况。连接后,运行查询很快。当我使用SQL Server身份验证进行连接时,不会发生此问题。

环境:

  • Windows 7,以域用户身份登录
  • 通过IP地址的TCP连接(不是主机名)
  • 服务器位于通过VPN连接的远程位置
  • 没有加密

当我使用我的域帐户登录到同事的Windows 7计算机上并通过同一VPN连接到同一SQL Server时,没有延迟。当同一位同事使用自己的域帐户登录我的PC时,他遇到了延迟。这些测试表明问题是我的PC独有的。同样,仅当连接到此特定的SQL Server和VPN时,才会出现问题。我可以通过Windows身份验证立即连接到本地网络上的其他SQL Server。

我尝试过的没有成功的事情:

  • 禁用的防病毒和防火墙
  • 将“%userprofile%\ AppData \ Roaming \ Microsoft \ SQL Server Management Studio”下的“ 12.0”文件夹重命名为“ _12.0”,以强制SSMS重新创建我的用户设置。
  • 将网络协议强制为TCP,而不是TCP <default>。我也尝试过命名管道,但是没有为此设置服务器。
  • 安装了SSMS 2012,并尝试使用它而不是2014。
  • 禁用的IPv6
  • 在我的etc \ hosts文件中将Blackholed crl.microsoft.com更改为127.0.0.1。
  • 在SSMS,Visual Studio和Windows中禁用了“客户体验改善计划”。
  • 从我的PC上卸载所有与SQL Server相关的应用程序,仅在2012年重新安装。

TCPView线索:

  • 使用TCPView,我注意到当我建立一个新的连接时,它的状态立即变为ESTABLISHED,但是随后又不断尝试与SQL Server建立一个或两个连接,并使用TIME_WAIT关闭它。在我同事的计算机上,这些连接已建立且牢固。因此,我很确定这是超时的根源,但是连接的目的是什么,为什么连接失败?(我的SSMS中没有任何插件。)

有任何想法吗?

更新:Intellisense /自动完成提示(?):

我注意到,一旦我终于建立连接,Intellisense /自动完成功能就无法使用。这些是否需要与SSMS分开的连接?我尝试禁用它们,但似乎无法解决长时间的连接延迟。


您是否尝试使用/ log开关运行SSMS?
先生Magoo 2015年

@MisterMagoo现在尝试。它实际上不会记录有关其连接尝试的任何信息(建立新连接时文件不会增长)。它主要涉及在UI中加载某些程序包,例如“从缓存中成功加载组件程序集”。我找不到任何错误或异常。
乔丹·里格

好的,我不确定是否可以,但是认为值得一试。如果您真的对发生的事情感兴趣,则可能需要对Sysinternals Process Monitor进行分解,看看是否可以确定正在发生的事情。technet.microsoft.com/en-us/library/bb896645.aspx
Magoo先生

我已经仔细研究了ProcMon转储大约一个小时,但是由于事件太多(甚至过滤到Ssms.exe),我无法做太多事情。
约旦·里格

@MisterMagoo我所能看到的就是我用TcpView看到的连接尝试确实花费了很长时间(每次尝试都超过5秒)。我基于在特定本地端口上看到“ TCP Connect”事件的基础,然后下一次我看到在该本地端口上发送或接收的任何内容总是至少在5秒钟之后。
乔丹·里格

Answers:


19

当您然后您的同事连接到服务器时,请尝试使用SQL Profiler运行跟踪。
选择“ RPC”,“ SQL语句和PreConnect-启动/完成”。
选择“将结果保存到表”选项,然后比较两个表以查找瓶颈。

或者,由于您是通过IP连接的,因此可能正在执行反向DNS查找。如果是这样,请在您的主机文件中添加一个条目。


2
我为服务器的IP地址添加了本地etc / hosts条目,然后再次尝试SSMS。答对了!超级快。谢谢!(我以前像以前那样通过IP地址而不是主机名通过SSMS进行连接。)我只是想知道为什么需要这种解决方法,而我的同事却不需要。它似乎确实与DNS有关。无论如何,这对我来说是一个很好的解决方案,因此一旦您更新答案,我就会奖励您。
约旦·里格

我认为这是反向查找,因为当我删除主机条目时,ping-一个###。###。###。###在第一次ping之前非常慢(反向查找暂停了5秒。)添加回主机项后,ping -a很快。在tracert或nslookup中没有任何区别。我认为我的PC上肯定有一些不同,这会导致我的同事不在时(或在他们的同事上快得多),我进行反向查找。顺便说一句,由于连接速度很快,我的Intellisense可以再次工作。
约旦·里格

即使在hosts文件中为IP提供了伪造的DNS条目,也可以使这项工作更快!谢谢!
felickz

在收到您的回答之前,我尝试通过VPN连接SSMS时遇到超时,是的,这很有意义,因为我正在通过IP连接到服务器,并且名称解析无法正常工作。经过数小时的努力,最终在主机文件中添加了一个条目,使其正常工作。谢谢!作为一个脚注,我想说的是我正在使用来自不同域的Windows身份验证和runas / netonly,它在此解决方案中可以正常工作。
RobbZ

5

首先应该检查的是服务器或客户端的DNS设置

SQL Server连接到Active Directory的问题并不罕见。如果您尝试使用本地Windows帐户,我相信您不会遇到问题。服务器配置有公共Internet DNS并不罕见,当SQL Server连接到DC以检查凭据并进行验证时,它将尝试与公共DNS而不是AD的DNS服务器进行顶级联系。由于此信息未存储在公共DNS上,因此将无法验证,这将导致延迟,直到它设法通过NTLM联系适当的DNS服务器或DC

由于您没有遇到其他SQL Server的问题,因此几乎可以肯定,该问题与AD或DC配置无关。

IPCONFIG.EXE /所有从cmd命令检查配置的DNS服务器。您应该仅配置AD的DNS服务器。删除所有公共DNS服务器,仅保留AD的DNS服务器。


您是否建议SQL Server正在与公共DNS联系以查找域控制器的IP地址,并且在尝试验证Windows身份验证时导致延迟?如果是这样,为什么我的同事的PC在相同的本地网络上通过相同的VPN可以正常工作?我检查了计算机上的DNS设置,然后我的IP部门要求我添加另外的第三个DNS服务器,但我的同事的PC上没有该服务器。但是,当我删除该服务器时,做了一个ipconfig / flushdns,然后再次尝试,它仍然很慢。
约旦·里格

使用服务器的IP地址或FQDN(而不仅仅是主机名)对我来说有很大的不同。就我而言绝对是一个缓慢的DNS问题。
userSteve

0

C:\Windows\System32\drivers\etc\hosts通过添加这样的行来扩展文件:

201.202.203.204     mysqlserver

201.202.203.204 是您的SQL Server的IP地址。

mysqlserver -您喜欢的任何名称(您不必在任何地方使用它)。

这使我的服务器更快。

感谢:d -_- b,乔丹,里格,费利克兹,罗伯兹


0

为域网络配置文件关闭SQL Server上的Windows防火墙。

  • 启动Powershell
  • 运行Get-NetFirewallProfile -Profile Domain以检查其当前状态
  • 如果已启用,请运行:Set-NetFirewallProfile -Profile Domain -Enabled False将其关闭。

如果是这样,您可以稍后再将其打开并微调您的设置。或者,如果您处于安全的环境中,可以将其关闭。

奇怪的是,即使Windows防火墙阻止了通信,您仍然可以连接,但是初始握手和后续请求都将非常慢。我的理论(没有任何实际证据)是,在这种情况下,通信依赖于命名管道,这在远程PC之间的速度要慢得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.