MS Native SQL 驱动程序 10.0 与 SQL Server 2008 连接创建失败

MS Native SQL 驱动程序 10.0 与 SQL Server 2008 连接创建失败

我正在尝试缩小范围并调试相当难以捉摸的错误:

State: 08001
Code: 258
Msg: [Microsoft][SQL Server Native Client 10.0]TCP Provider: Timeout error [258]. 

State: HYT00
Code: 0
Msg: [Microsoft][SQL Server Native Client 10.0]Login timeout expired

State: 08001
Code: 258
Msg: [Microsoft][SQL Server Native Client 10.0]Unable to complete login process due to delay in prelogin response

到目前为止我已经尝试过:

  • 确保最大 RAM 设置正确,并且比 RAM 的物理大小小 2GB
  • 确保工作线程不受限制
  • 确保远程连接限制比“高峰时段”测量的负载大几倍
  • 确保远程连接登录超时设置为 20 秒
  • 确保 PHP 服务器和 DB 服务器之间的连接稳定(每 1 分钟跟踪一次路由,最大连接时间为 23 毫秒)
  • 确保 DNS 没有问题(PHP 使用 DB 的 IP 进行连接)
  • 确保应用程序具有唯一的登录凭据,不与任何其他应用程序共享
  • 确保 TCP/IP 端口没有耗尽
  • 确保应用程序登录是 SQL 登录,以排除任何与 AD 相关的问题
  • 确保连接池已打开
  • 确保查询超时设置为非常高的秒数

到目前为止,上述操作均未对数据库/网络配置造成任何问题,也没有对应用程序代码造成任何明显问题。

大多数情况下,连接创建都会成功。

问:还有哪些方面会影响连接创建?并产生这种看似随机的故障?

答案1

检查问题是否存在于服务器的本地主机上,以排除网络硬件导致超时的可能性。假设在本地主机上测试时问题消失,那么它很可能与网络有关。

您提到每 1 分钟检查一次跟踪路由时有 23 毫秒的延迟。23 毫秒似乎不像是 LAN 连接,而且很可能有多个跳数,您还可能会看到偶尔的数据包丢失。

您不应该每 1 分钟执行一次跟踪路由,而应该执行一次不带超时的 ping,ping -t servername然后让它静置。然后过一会儿,您就可以检查统计数据,CTRL + BREAK并查找数据包丢失或延迟波动。

另一个选择(除非你已经这样做了)是使用 PDO 连接

相关内容