SQL Server的连接超时


Answers:


213

是的,您可以追加;Connection Timeout=30连接字符串并指定所需的值。

Connection Timeout属性中设置的超时值是以秒为单位的时间。如果未设置此属性,则连接的超时值为默认值(15秒)。

此外,将超时值设置为0,可以指定尝试连接等待无限时间。如文档中所述,这是您不应该在连接字符串中设置的内容:

值为0表示没有限制,并且应在ConnectionString中避免该值,因为连接尝试将无限期等待。


4
这个超时时间是分钟还是秒?
2013年

1
@ user1“在终止尝试并生成错误之前,等待服务器连接的时间(以秒为单位)。”
Santux

5
仅供参考:连接超时= 0是无限的。
阿卜杜勒·萨博尔2013年

你能举个例子吗?我正在使用EF6,当我执行某些流程程序返回超时错误时,我的表中有300万个数据...注意:我正在表中使用索引
saulyasar 2015年

4
@saulyasar这是CONNECTION超时,而不是COMMAND超时。CONNECTION超时是关于尝试连接到sql server的时间。您要调查COMMAND超时,这是过程或语句在超时前将运行多长时间。
granadaCoder 16'Dec

32

嗯...

正如Darin所说,您可以指定更高的连接超时值,但我怀疑这确实是问题。

当您获得连接超时时,通常是以下问题之一:

  1. 网络配置-Web服务器/开发盒与SQL Server之间的连接缓慢。增加超时可能会纠正此问题,但是调查潜在问题是明智的。

  2. 连接字符串。我曾看到过这样的问题,由于某种原因,错误的用户名/密码会给出超时错误,而不是指示“访问被拒绝”的实际错误。这不应该发生,但这就是生活。

  3. 连接字符串2:如果您错误或不完整地指定服务器名称(例如,mysqlserver而不是mysqlserver.webdomain.com),则会超时。是否可以使用命令行中连接字符串中指定的服务器名称来ping服务器?

  4. 连接字符串3:如果服务器名称在您的DNS(或主机文件)中,但指向不正确或不可访问的IP,则您将得到超时,而不是机器找不到的错误。

  5. 您正在调用的查询正在超时。看起来好像是到服务器的连接是问题所在,但是根据您应用的结构,您可能一直将其一直执行到超时发生之前查询正在执行的阶段。

  6. 连接泄漏。正在运行多少个进程?有多少个开放连接?我不确定原始ADO.NET是否执行连接池,在必要时自动关闭连接或在企业库中或所有配置的位置关闭连接。这可能是一条红鲱鱼。但是,在使用WCF和Web服务时,连接不紧密会导致超时和其他不可预测的行为。

尝试的事情:

  1. 使用SQL Management Studio连接到服务器时会超时吗?如果是这样,则网络配置可能是问题所在。如果在与Management Studio连接时没有发现问题,则问题出在您的应用程序中,而不是服务器。

  2. 运行SQL事件探查器,并查看实际情况。您应该能够判断出您是否确实在连接,或者查询是否是问题所在。

  3. 在Management Studio中运行查询,然后查看需要多长时间。

祝好运!


如果您的查询超时,那么我想您会收到一个
commandtimeout

@ user55474可能;取决于(非常罕见),它如何被调用。
3Dave 2010年


@hugh我相信我说这很罕见,但是我已经亲眼目睹了。
3Dave 2012年

1
为“运行SQL事件探查器” +1。听起来这很复杂,但实际上您只需单击“工具> SQL Server Profiler”,然后观察您的应用程序对SQL Server所说的话。原来我是选项5 :)
Andrew Kvochick

11

如果要动态更改它,我更喜欢使用 SqlConnectionStringBuilder

它允许您将ConnectionString(即字符串)转换为Object类,所有连接字符串属性都将成为其Member。

在这种情况下,真正的好处是您不必担心连接字符串中是否已经存在ConnectionTimeout字符串部分?

同样,当它创建一个Object时,总是在对象中分配值而不是操纵字符串总是好的。

这是代码示例:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

2
我不敢相信将ConnectionTimeout属性设置为SqlConnection只读类型被认为是一个好主意。
马斯洛(Maslow)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.