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_MACHINESOFTWAREmicrosoftMicrosoft SQL ServerMSSQL.?MSSQLServerSuperSocketNetLibTcp
注意SQL server的Native client也有類似配置,不要和server side 的TCP配置搞混了:
?
Native client的 keep alive 配置保存在如下位置:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerClientSNI9.0tcp