zoukankan      html  css  js  c++  java
  • 有关SQL server connection Keep Alive 的FAQ(2)

    这篇文章再进一步讨论有关Keep Alive的几个问题.

     

    1Keep Alive机制,是否只和特定的provider有关,比如SQL native client, odbc, oledb, ADO等等?

     

    []和连接使用的上层应用(ADO,SQL client, ODBC etc) 无关。和TCP协议和Named Pipe 有关。

    2Blog上有一句提到如果该连接空闲时间(没有任何数据交互)超过keepalivetime”,这里面说的数据,是指网络包还是实实在在的数据库里面的数据?

    [] 是网络层面上的package,但不包括keepalive


    3
    、以上讲的Keep Alive均指server端的,客户端的Keep Alive能否设置,如何设置,如何知道客户端设置了,如果客户端设置了,以server的为准还是client的为准?

     

    []客户端设置参考如图。

    红色框框里面的是针对客户端程序使用native client的设置值。

    服务器端的Keep Alive 控制SQL server进程的Keep Alive值。客户端的设置控制客户端程序的Keep Alive值。他们相互不干扰。比方说,客户端建立TCP 连接到SQL server,这个时候客户端和服务器的keep alive都会起作用。它们各自发送自己进程的keepalive包。谁的keepalive值小谁就先发出keepalive 包。比如说,如果客户端设置30秒,那么客户端在条件满足时每隔30秒就会发一个keepalive,而服务器的keepalive10秒,那么服务器会在条件满足时每隔10秒发个keepalive包。 客户端TCP通过keepalive包监控connection情况,如果它发现connection有问题,就会关闭连接。服务器端也一样的。

    4 假设应用远程连接至数据库做update操作,一直不commit,在未返回前模拟数据库端对应用网卡disabled. 我在服务器上设置服务器的TCP keepalive15秒。这时候35~40秒我的程序收到报错。 为什么不是我设置的15秒而是40秒? 

    []服务器的Keep Alive只管SQL server进程自己的connections。服务器网卡突然被disable, 那么操作系统会马上获知这个事件,那么这个SQL server 也会马上知道,所以不会等待15秒,而是马上就会把相应connection断开。而这个时候客户端程序因为网卡已经断开,无法收到服务器的关闭连接事件,那么客户端的keepalive会发出,侦测连接的情况。客户端缺省keepalive =30 秒,所以大概35~40秒客户端程序才会检查到连接错误。

    如果是在客户端disable网卡,那么客户端的连接会马上关闭,而服务器端会过15秒才知道connection出问题。

     

    5.在博客中有句话:如果一个应用程序没有显式调用函数设置TCP连接的keepalive属性,那么他的TCP连接默认使用OS TCP配置。OS keep alive配置默认是关闭的。我确实在HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters找不到任何的keep alive值,而OSkeep alive配置默认是关闭的,关闭表示什么意思?

    [关闭就是disable,就是说没有发送keep alive包这样的行为。那么对于一个连接,只有在真正发送数据的时候才能知道是否可用,而不能事先知道。keepalive包的侦测行为可以更快知道一个连接是否正常。 SQL server SQL native client等部件的keep alive缺省都是打开(enable)的。

     

  • 相关阅读:
    C语言第0次作业
    C博客作业01分支、顺序结构
    C博客第02次作业循环结构
    关于编写有效用例的12秘诀
    关于调用FTP中遇到的问题以及解决方案
    关于FtpWebRequest.Timeout属性的理解
    WPF中四种不同的测量单位
    关于检查Oracle表及列是否存在SQL语句
    ArcSDE configuration files
    C#判断不同版本的Excel
  • 原文地址:https://www.cnblogs.com/blosaa/p/2550144.html
Copyright © 2011-2022 走看看