尝试使用Windows Authentication通过 TCP 连接到 SQL Server 2012 实例时,我在 SQL Server Management Studio 2014 中遇到了极长的延迟(10~30 秒) 。连接对象资源管理器或新的空白查询窗口时会发生这种情况。连接后,运行查询会很快。当我使用 SQL Server 身份验证进行连接时,问题不会发生。
环境:
- Windows 7,以域用户身份登录
- 通过 IP 地址(不是主机名)的 TCP 连接
- 服务器位于通过 VPN 连接的远程位置
- 无加密
当我使用我的域帐户登录同事的 Windows 7 计算机,并通过同一个 VPN 连接到同一个 SQL Server 时,没有任何延迟。当同一位同事使用他自己的域帐户登录我的电脑时,他遇到了延迟。这些测试表明问题是我的 PC 独有的。此外,该问题仅在连接到此特定 SQL Server 和 VPN 时出现;我可以毫无延迟地通过 Windows 身份验证连接到本地网络上的其他 SQL Server。
我尝试过但没有成功的事情:
- 禁用防病毒和防火墙
- 将“%userprofile%\AppData\Roaming\Microsoft\SQL Server Management Studio”下的“12.0”文件夹重命名为“_12.0”,以强制 SSMS 重新创建我的用户设置。
- 强制网络协议为 TCP 而不是
<default>
. 我也尝试过命名管道,但我的服务器没有为此设置。 - 安装了 SSMS 2012 并尝试了它而不是 2014。
- 禁用 IPv6
- 在我的 etc\hosts 文件中将 crl.microsoft.com 黑洞化为 127.0.0.1。
- 在 SSMS、Visual Studio 和 Windows 中禁用客户体验改善计划。
- 从我的电脑上卸载了所有与 SQL Server 相关的应用程序,并在 2012 年重新安装。
TCPView 线索:
- 使用 TCPView,我注意到当我建立一个新连接时,它的状态会立即变为 ESTABLISHED,但随后会不断尝试与 SQL Server 的一两个连接,并使用 TIME_WAIT 关闭。在我同事的计算机上,这些连接已建立且稳固。所以我很确定这是超时的来源,但是连接是什么,为什么会失败?(我的 SSMS 中没有任何插件。)
有任何想法吗?
更新:智能感知/自动完成线索(?):
我注意到,一旦我最终连接,Intellisense/Autocomplete 就不起作用了。这些是否需要与 SSMS 单独连接?我尝试禁用它们,但似乎无法解决长时间的连接延迟。
尝试在您和您的同事连接到服务器时使用 SQL Profiler 运行跟踪。
选择 RPC、SQL 语句和 PreConnect - 开始/完成。
选择 Save Results To Table 选项,然后比较 2 个表以找到瓶颈。
或者,由于您通过 IP 连接,它可能正在执行反向 DNS 查找。如果是这样,请在您的主机文件中添加一个条目。
您应该首先检查的是您的服务器或客户端 DNS 设置
您的 SQL Server 在连接到 Active Directory 时遇到问题并不少见。如果您尝试使用本地 Windows 帐户,我相信您不会遇到问题。服务器配置公共互联网 DNS 并不少见,当 SQL Server 连接到 DC 以检查凭据并验证它时,它将尝试顶部联系公共 DNS 而不是 AD 的 DNS 服务器。由于此信息未存储在公共 DNS 上,因此无法验证,这将导致延迟,直到它设法通过 NTLM 联系正确的 DNS 服务器或 DC
由于您没有遇到其他 SQL Server 的问题,因此几乎可以肯定该问题与 AD 或 DC 配置无关
从 cmd触发IPConfig.exe /all命令以检查配置的 DNS 服务器。您应该只配置 AD 的 DNS 服务器。删除所有公共 DNS 服务器,只保留 AD 的 DNS 服务器。
我
C:\Windows\System32\drivers\etc\hosts
通过添加这样的行来扩展文件:201.202.203.204
是您的 SQL Server 的 IP 地址。mysqlserver
- 您喜欢的任何名称(您不必在任何地方使用它)。这使我的服务器更快。
感谢: d-_-b, Jordan, Rieger, felickz, RobbZ
为域网络配置文件关闭 SQL 服务器上的 Windows 防火墙。
Get-NetFirewallProfile -Profile Domain
以检查其当前状态Set-NetFirewallProfile -Profile Domain -Enabled False
将其关闭。如果是这样,您可以稍后将其重新打开并微调您的设置。或者,如果您处于安全环境中,则可以将其关闭。
奇怪的是,即使 Windows 防火墙阻止了通信,您仍然可以连接,但初始握手和后续请求都会非常慢。我的理论(基于没有真正的证据)是,在这些情况下,通信会回到命名管道上,这在远程 PC 之间要慢得多。
当我们搬到数据中心时,我遇到了这个问题。IPS 变了,AD 也变了服务器。
要解决此问题,请在 Management Studio 所在的本地计算机的主机上添加服务器条目。
在 Windows 上的主机文件上添加条目:
xx.xxx.xx.xxx 服务器名.域
这做了一个反向DNS。