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

Jor*_*ger 26 sql-server ssms sql-server-2012 connectivity

尝试使用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 而不是<default>. 我也试过命名管道,但我的服务器没有为此设置。
  • 安装了 SSMS 2012 并尝试使用它而不是 2014。
  • 禁用 IPv6
  • 在我的 etc\hosts 文件中将 crl.microsoft.com 黑到 127.0.0.1。
  • 在 SSMS、Visual Studio 和 Windows 中禁用客户体验改善计划。
  • 从我的 PC 上卸载了所有与 SQL Server 相关的应用程序,然后在 2012 年重新安装。

TCP查看线索:

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

有任何想法吗?

更新:智能感知/自动完成线索(?):

我注意到,一旦我终于连接上了,智能感知/自动完成就不起作用了。这些是否需要与 SSMS 分开连接?我尝试禁用它们,但似乎并没有解决长连接延迟问题。

d-_*_*_-b 22

尝试在您和您的同事连接到服务器时使用 SQL Profiler 运行跟踪。
选择 RPC、SQL 语句和预连接 - 开始/完成。
选择 Save Results To Table 选项,然后比较 2 个表以找到瓶颈。

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

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

Nik*_*laD 5

您应该首先检查您的服务器或客户端 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 服务器。