【问题标题】:Connection Timeout Expired When there are many requests simultaneouslyConnection Timeout Expired 当同时有很多请求时
【发布时间】:2019-06-24 15:21:57
【问题描述】:

我有一个访问 SQL Server 数据库的 .Net 应用程序(REST API)。有时当同时有许多 API 请求时,我会收到 Connection Timeout 异常,因此所有请求都失败了。情况并非总是如此,仅当有许多请求同时访问服务器时才会发生。

异常详情:

System.Data.SqlClient.SqlException (0x80131904):连接超时 已到期。尝试消费时超时时间已过 登录前握手确认。这可能是因为 登录前握手失败或服务器无法回复 时间。尝试连接到此服务器所花费的持续时间 是 - [预登录] 初始化 = 4;握手=14992; ---> System.ComponentModel.Win32Exception (0x80004005):等待操作 超时。

我们将不胜感激。

【问题讨论】:

  • 您可能需要考虑连接到 SQL Server 的方式。您能否提供有关如何连接到数据库的更多信息?
  • 在这种情况下可能没有什么理由。 1.您使用的是express sql server。 2. 查询之间的死锁。 3. 执行的查询超过标准超时 - 30 秒
  • docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/… 可能有用。还分析您的 SQL 服务器请求 - 可能会在非索引列数据等上发生多次选择。如果您写入数据 - 然后会启动各种锁定 ....
  • >>>登录前握手失败

标签: asp.net .net sql-server asp.net-mvc asp.net-apicontroller


【解决方案1】:

来自这个(赞成的)评论

在这种情况下可能有几个原因:
1. 您使用的是 SQL Server Express
2. 查询之间的死锁
3. 执行的查询超过标准超时时间 - 30 秒

你应该首先排除N1,因为服务器版与client强加的连接超时无关

然后排除 N2,因为死锁由服务器死锁监视器自动解决,该监视器每 5 秒控制一次死锁,或者在死锁频繁时甚至更少。

排除 N3 因为connection timeout 与execution timeout 无关。你的超时时间是CONNECTION timeout。

您应该在您的客户端上增加connection timeout 或对您的服务器进行故障排除,在那里您的服务器变得无响应。

【讨论】:

  • 对不起,我不同意你的回答。 Express 版本有限制,可能会影响性能。接下来,僵局。用户可以锁定一个或多个表。对不起,但是,我们没有看到任何查询或表格,我们只能写假设。最后,前面几个原因的结果:请求执行慢(超过标准连接超时-30秒),连接已经关闭而没有收到应答
  • >>>连接已关闭而未收到答案Connection Timeout Expired”这意味着您的查询从未开始。您根本没有连接到服务器。例如,如果服务器宕机,或者你的连接字符串错误,你也有 CONNECTION 超时。
  • 好的。这是真的。谢谢。 Sam 写过“当同时有许多 API 请求时,我得到连接超时异常”。我只写了假设。
  • 您发布的点赞的第二个答案与我的答案相同:“在连接字符串中添加 30 秒的连接超时”。由于第一次尝试连接超时应该增加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多