Maison  >  Article  >  base de données  >  转载:有关SQL server connection KeepAlive 的FAQ

转载:有关SQL server connection KeepAlive 的FAQ

WBOY
WBOYoriginal
2016-06-07 17:40:391002parcourir

转载:有关SQL server connection KeepAlive 的FAQ 转: 1、什么是SQL server TCP连接的keep Alive? 简单说,keep alive 是SQL server在建立每一个TCP 连接的时候,指定了TCP 协议的keepaliveinterval 和keepalivetime参数。这样对每个TCP连接,如果该连接

转载:有关SQL server connection KeepAlive 的FAQ

   

转:

 

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

   

3、SQL server的keepalive 和Windows的TCP协议里面的keepalive 是一样的吗?

原理一样,但不相互干扰。

Windows 的TCP协议也有keep alive 配置,香港服务器,位置如下:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

OS的TCP协议的keep alive 和SQL server 的keep alive 工作原理一样的,香港虚拟主机,就是在建立TCP连接的时候指定TCP连接的keepalive属性(参见后面描述)。但是SQL server读取自己注册表的keep alive来设置TCP连接属性,不理会windows OS的注册表里面的keepalivetime和keepaliveinterval的值。

如果一个应用程序没有显式调用函数设置TCP连接的keepalive属性,那么他的TCP连接默认使用OS 的TCP配置。OSkeep alive配置默认是关闭的。

有关OS 的TCP配置参考如下文档:

   

 

   

KeepAliveInterval

Key: Tcpip\Parameters

Value Type: REG_DWORD - Time in milliseconds

Valid Range: 1 - 0xFFFFFFFF

Default: 1000 (one second)

Description: This parameter determines the interval that separates keepalive retransmissions until a response is received. After a response is received, KeepAliveTime again controls the delay until the next keepalive transmission. The connection is aborted after the number of retransmissions that are specified by TcpMaxDataRetransmissions are unanswered.

KeepAliveTime

Key: Tcpip\Parameters

Value Type: REG_DWORD - Time in milliseconds

Valid Range: 1 - 0xFFFFFFFF

Default: 7,200,000 (two hours)

Description: The parameter controls how frequently TCP tries to verify that an idle connection is still intact by sending a keepalive packet. If the remote computer is still reachable and functioning, the remote computer acknowledges the keepalive transmission. By default, keepalive packets are not sent. A program can turn on this feature on a connection

   

4、SQL server 和OS里面 的TCP的keep alive是如何实现的?

详见如下文档:

 

SQL server也是调用如下API,把keepalive参数(lpvInBuffer)pass给这个API:

   

int WSAIoctl(

  __in   SOCKET s,

  __in   DWORD dwIoControlCode,

  __in   LPVOID lpvInBuffer,

  __in   DWORD cbInBuffer,

  __out  LPVOID lpvOutBuffer,

  __in   DWORD cbOutBuffer,

  __out  LPDWORD lpcbBytesReturned,

  __in   LPWSAOVERLAPPED lpOverlapped,

  __in   LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine

);

   

该文章里面有如下描述:

SIO_KEEPALIVE_VALS (opcode setting: I, T==3)

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn