1 、什么是sql server tcp 连接的keep alive ? 简单说,keep alive 是sql server在建立每一个tcp 连接的时候,指定了tcp 协议的keepaliveinterval 和keepalivetime参数。这样对每个tcp连接,如果该连接空闲时间(没有任何数据交互)超过keepalivetime,tcp
1、什么是sql server tcp连接的keep alive?
简单说,keep alive 是sql server在建立每一个tcp 连接的时候,指定了tcp 协议的keepaliveinterval 和keepalivetime参数。这样对每个tcp连接,如果该连接空闲时间(没有任何数据交互)超过keepalivetime,tcp协议会自动发出keepalive 包检测连接存活与否。如果keepalive 检测次数超过注册表tcpmaxdataretransmissions定义的值而对方还是没有回应,那么tcp就认为该连接有问题而关闭它。通过这样的机制sql server能够检测出orphaned connection等问题。
sql server 对每个tcp连接缺省指定keep alive 为30秒,keepaliveinterval为1秒。windows tcp配置的tcpmaxdataretransmissions缺省是5次。就是说,如果tcp连接idle了30秒,那么tcp会发送第一个keepalive检查。如果失败,那么tcp会每隔1秒重发keepalive 包,直到重发5次。如果第五次检测依然失败,则该连接就被close。所以,一个tcp连接如果出现异常问题,大概在35秒的时候就会被close。
2、在那里可以配置sql server 的keep alive 配置?
sql server 2000代码里面也有对tcp连接指定keep alive属性,但没有提供用户界面给用户定制修改。sql server2005使用configuration manager可以修改keep alive值,但是不能修改keepalive interval。 keepaliveinterval是hardcoded的1秒。
configuration manager的界面如下:
该值保存在注册表如下位置:
hkey_local_machine\software\microsoft\microsoft sql server\mssql.?\mssqlserver\supersocketnetlib\tcp
注意sql server的native client也有类似配置,不要和server side 的tcp配置搞混了:
native client的 keep alive 配置保存在如下位置:
hkey_local_machine\software\microsoft\mssqlserver\client\sni9.0\tcp