也许,我的问题很愚蠢。无论如何,我的SQL Server将TCP/IP keepalive设置设置为30000毫秒。同时,在hkey_local_machine\system\currentcontrolset\services\tcp ip\parameters中没有任何与keepalive设置有关的注册表项。
因此,我假设我的Windows Server 2008宿主SQL Server不是为Keepalive TCP/IP功能设置的。这是对的吗?如果正确,SQL Server是否向客户端发送keepalive包?
换句话说,如果未设置Windows Keepalive设置,SQL Server Keepalive功能是否有效?
谢谢你

最佳答案

Windows使用注册表中的keepalive设置(默认为2小时)。正如Lordbaconpants所建议的,这适用于整个机器。另外,sql server使用自己的keepalive,这是您在sqlserver配置管理器->sqlserver网络配置->协议->mssqlserver协议->tcp/ip中已经看到的keepalive,它有一个更合适的值(对于数据库服务器):30秒。
默认情况下,禁用Windows Server 2008和Windows Vista的TCP/IP的TCP Keepalives。如果通过使用setsockopt windows sockets函数启用,则默认情况下每两小时发送一个keepalive段,由keepalivetime注册表值控制。即使启用了,其他上层协议(如netbios)也会发送自己的keepalive值。如果上层协议使用的keepalive间隔小于tcp keepalive间隔,则不会发送tcp keepalive值。例如,TCP/IP上的Netbios会话每60分钟发送一个Netbios Keepalive请求。因此,从未使用为NetBIOS会话启用的TCP keepalive值。
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd349797(v=ws.10)

关于sql-server - Windows和SQL服务器keepalive tcp/ip设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44816356/

10-13 00:02