也许,我的问题很愚蠢。无论如何,我的SQL服务器将tcp / ip keepalive设置设置为30,000 ms。同时,我在HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ TCPIP \ Parameters中没有看到任何与keepalive设置有关的注册表项。
因此,我假设我的Windows Server 2008托管SQL服务器没有设置为keepalive tcp / ip功能。它是否正确?如果这是正确的,SQL服务器是否会向客户端发送keepalive包?
换句话说,如果未设置Windows keepalive设置,SQL server keepalive功能是否有效?
谢谢
答案 0 :(得分:0)
Windows使用注册表中的keepalive设置(默认为2小时)。正如LordBaconPants所建议的,这适用于整个机器。另外,SQL Server使用自己的keepalive,即您在SQL Server配置管理器-> SQL Server网络配置->协议-> MSSQLSERVER的协议-> TCP / IP中已经看到的值(对于数据库服务器) :30秒。
默认情况下,Windows Server 2008和Windows Vista的TCP / IP的TCP keepalive处于禁用状态。如果通过使用setsockopt Windows套接字功能启用了,则默认情况下,每两个小时发送一次keepalive段,这由KeepAliveTime注册表值控制。即使启用,其他上层协议(例如NetBIOS)也会发送自己的keepalive值。如果上层协议使用的Keepalive间隔小于TCP的Keepalive间隔,则永远不会发送TCP的Keepalive值。例如,基于TCP / IP的NetBIOS会话每60分钟发送一次NetBIOS保持活动请求。因此,永远不会使用为NetBIOS会话启用的TCP keepalive值。