有关SQL server connection Keep Alive的FAQ

这个是SQL Server ">Keep Alive FAQ文章的最后一篇。

问题1:为什么我在客户端设置了KeepAlive值,但是我使用SQL server management studio 测试的时候,该值总是不起作用?

[答]目前市场上主流的数据库访问技术有ODBC,OLEDB,SQL native client 和 SQLclient。其中SQLclient是.NET里面使用的托管provider。目前SQL Server configuration manager里面提供的keepalive设置是针对SQL native client 的:

也就是说, 该值只对使用SQL 820.html">Native Client 来访问数据库的程序有效。SQLcmd.exe是使用SQL native client来访问SQL server的一个命令行工具,所以您可以使用SQLCmd来测试上面的keepalive值。注意修改keepalive值后,你需要退出SQLcmd重新运行它才能使用新值。我在几组机器测试了几组不同的keepalive值,SQLcmd程序的TCP连接都很好按照设置的值发出keepalive网络包。注意你需要使用TCP连接服务器来测试。 我使用下面的连接串以保证使用TCP 连接:

SQLcmd -E -STCP:mycomputer\SQL2012,55890

(机器名:mycomputer,实例名:SQL2012,端口号 55890)

我使用network monitor 3.4捕获keepalive包如下图:

上图中深蓝高亮的是我挑出的由服务器TCP连接发给SQLcmd的keepalive包,每个包间隔30秒(时间间隔可以看time offset前后相减即可)。而上图间隔7秒的是SQLcmd的TCP连接发出的keepalive包。我测试中使用SQL server configuration manager设置了native client 的keepalive为7秒。从上面图也印证了服务器端的TCP连接和客户端的TCP连接各自发送自己的keepalive包,相互不影响。

注意, SQL Server native client的keepalive值存放在下面注册表里面:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNIx.0\tcp\Property2

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNIx.0\tcp\Property3

那么SQL server management studio (ssms.exe)是使用.NET managed的SQLclient,所以上面针对native client的设置对SQLclient无效。SQL server management studio  使用了 hard-coded的30秒值,无法修改。

问题2. ODBC,SQL OLEDB,SQL native client和SQLClient的TCP keepalive缺省时间都是多少?在哪里可以设置?

[答]缺省值都是30秒。

可以修改如下注册表值来设置ODBC 和SQL OLEDB的keepalive值:

HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\Tcp ==> KeepAliveTime : DWORD : <dwValue>

HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\Tcp ==> KeepAliveInterval : DWORD : <dwValue>

注意如果是x64的机器,在上面运行32位的ODBC/SQL OLEDB程序,则需要修改如下注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\TCP

对于SQLserver native client 和SQL server 的keep alive设置,可以在SQL server configuration manager 修改,具体请参考请参考FAQ (1)和FAQ (2)或问题1。

对于SQL client,需要在使用sqlclient的应用程序里面使用代码设置。

时间: 2024-10-23 16:25:36

有关SQL server connection Keep Alive的FAQ的相关文章

有关SQL server connection Keep Alive的几个问题解答

1.什么是SQL server TCP连接的keep Alive? 简单说,keep alive 是SQL server在建立每一个TCP 连接的时候,指定了TCP 协议的keepaliveinterval 和keepalivetime参数.这样对每个TCP连接,如果该连接空闲时间(没有任何数据交互)超过keepalivetime,TCP协议会自动发出keepalive 包检测连接存活与否.如果keepalive 检测次数超过注册表TcpMaxDataRetransmissions定义的值而对方

ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

原文:ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB 您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity Framework将预设值使用的LocalDB. 在本节中,我们将显式地在Web.config文件中,添加应用程序的连接字符串(connection string)

SQL Server事务遭遇网络异常时的处理机制浅析

SQL Server数据库中,如果应用程序正在执行一个事务的时候突然遭遇了网络异常,例如网络掉包,网络中断等,那么这个事务会怎么样? SQL Server数据库是通过什么机制来判断处理呢? 估计很多人跟我一样都有不少疑问, 我们下面构造一个测试实验来测试验证一下.如下所示:     步骤1:在客户端连使用SSMS工具连接到测试数据库,执行下面脚本,显性事务既不提交也不回滚.模拟事务正在执行当中.   USE AdventureWorks2012; GO SELECT@@SPID;     BEG

防止ADO连接SQL Server时的隐式连接

ado|server 防止ADO连接SQL Server时的隐式连接Report Date:   2002/9 Prepared by:     郑            昀 Article last modified on 2002-9 The information in this article applies to: ü         Microsoft SQL Server 2000,7.0 ü         Microsoft ADO 2.5问题陈述:数据库服务器:Microso

如何在 Active Server Page 中访问 SQL Server

active|server|访问 SQL Server适用于 概要本文介绍了如何使用"ActiveX 数据对象"(ADO) 在 ASP 脚本中建立到 SQL Server 的连接,同时利用 ODBC 3.0 的连接池功能. 更多信息连接池启用 ODBC 连接池. 有关连接池的其他信息以及有关如何启用连接池功能的说明,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 164221 如何在 ODBC 应用程序中启用连接池 ODBC DSN使用"ODBC 管理

SQL Server的sa密码丢失解决

在网上看了很多如何修改SQLServer2005的密码的方法.大多数都是转了同一个帖子: 用windows权限进入,然后修改当前实例属性中的安全项,然后重新启动就可以修改了,但是操作手顺与我的SQLServer貌似不同.大概是SP1之前可以这么做吧. 首先用windows账户登录,然后在master表里执行: <div codepanel"=""> EXEC sp_password NULL, '你的新密码', 'sa'   ------------以下为网络搜集

《Tableau数据可视化实战》——1.5节连接SQL Server数据库

1.5 连接SQL Server数据库 尽管Tableau能很容易地连接Access.Excel以及其他平面文件,但数据经常是存储在服务器的关系型数据库中,比如SQL Server或者Oracle.Tableau也提供了一些其他数据存储的连接,本节将讨论如何使用Tableau连接Microsoft SQL Server. 准备工作 当你尝试从服务器访问数据时,安全角色.服务器连接.身份认证.端口.防火墙以及其他因素均可能产生问题,解决这些问题的方法超出了本书的范围,但你需要确定,你可以从已安装T

jTDS连接SQL Server时的Connection refused

     这几天从原来的服务器上check out出一个工程,使用的是Spring+Hibernate的轻量级架构,数据库是SQL Server2000,数据源使用的jtds.可是原本运行正常的程序无论如何也跑不起来,连接数据库时,总是出现java.sql.SQLException: "Network error IOException: Connection refused: connect".检查hibernate配置文件.使用查询分析器登陆数据库一切正常.于是google一下,发

理解SQL Server 2000的信任连接(Trusted connection)

connection|server 我在用OLEDB方式连接SQL Server时, 用到连接字: "provider=SQLOLEDB.1;data source=localhost;initial catalog=WroxBooks; Trusted_Connection=yes; User ID=sa;Password=;"调用后一直无法正常连接. ASP.NET错误描述:* Error while accessing data.用户 'CXY\ASPNET' 登录失败. ASP