MS Native SQL驱动程序10.0和SQL Server 2008连接创build失败

我试图缩小和debugging相当难以捉摸的错误:

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设置是正确的,然后再减去2GB的内存大小
  • 确保工作线程是无限的
  • 确保远程连接限制是“高峰时段”的测量负载的几倍,
  • 确保远程连接login超时设置为20秒
  • 确保PHP服务器和数据库服务器之间的连接稳定(traceroute每1分钟返回最大连接时间为23毫秒)
  • 确保DNS不是问题(PHP使用DB的IP进行连接)
  • 确保应用程序具有唯一的login凭证不与任何其他应用程序共享
  • 确保没有用尽的TCP / IP端口
  • 确保应用程序login是SQLlogin,以排除AD的任何问题
  • 确保连接池已打开
  • 确保查询超时设置为非常高的秒数

到目前为止,上述操作中没有一个产生DB /networkingconfiguration的任何问题,应用程序代码也没有任何明显的问题。

大部分时间连接创build成功。

问:还有哪些方面可以影响连接创build? 并产生这样看似随机的失败?

检查服务器的本地主机是否存在问题,以消除networking硬件导致超时的可能性。 假设在本地主机上testing时问题消失,那么很可能与networking相关。

每隔1分钟检查一次traceroute时,会提到23毫秒的延迟。 23毫秒看起来不像局域网连接,最有可能有多跳,你也可能会看到偶尔的数据包丢失。

而不是每1分钟做一个traceroute,你应该做一个ping没有超时,如ping -t servername ,让它坐下来。 然后过了一段时间,您可以使用CTRL + BREAK检查统计信息,并查看丢包情况和等待时间的波动情况。

另一种select(除非你已经这样做)是使用PDO来连接