sql-server - SqlException 超时已过期但未达到

标签 sql-server ado.net timeout mirroring

我们的服务器不时抛出这个众所周知的异常:

超时已过。操作完成前超时时间已过或服务器未响应。

当服务器处理大请求时,会在压力下发生这种情况。
我做了一些研究,发现我可以改变 连接字符串连接超时设置和/或 SqlCommand.超时数据读取器属性。

默认情况下,sql 命令超时设置为 30 秒和连接超时到 15 ,我们从不覆盖它们。

我在管理工作室中复制了上下文并手动执行了失败的请求。
它们的持续时间是 约 1 第二且永远 远远超过 30 .

但奇怪的是,当我查看服务器日志时,请求调用立即抛出此异常。
我的意思是,请求正在执行,一毫秒后引发异常。
对不起,让我看看这个 8 点 .

为了完整起见,我们的 sql 实例与 中的另一个实例进行了镜像。同步模式 .
我们通过表适配器使用 Ado.Net。

最佳答案

事实上,即使在设置了 READ_COMMITED_SNAPSHOT 之后,我们仍然会遇到这些随机超时。
在异步模式下设置镜像没有帮助,在多个线程中完成的查询在大约 1ms 后仍然随机超时,总是在繁忙时段。另一方面,触发超时的特定查询(INSERT 语句)本身执行得非常快(CPU 不到 1 毫秒,平均读取次数约为 10 次)。
调用堆栈如下:

at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)

at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)

at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

at System.Data.SqlClient.SqlConnection.Open()


所以超时似乎与查询本身无关。
根据另一个帖子:Multiple Simultaneous SQL Connection Timeouts In Multithreaded Windows Service和链接 MSDN blog post谈到 ADO.NET 错误,我们尝试将连接超时设置为 150 在连接字符串中。
无法确定我们是否遇到了此错误,但自此更改后不再引发超时。

关于sql-server - SqlException 超时已过期但未达到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5744904/

相关文章:

sql - TSQL - 基于表行和单元格值创建 View

sql-server - 查询 where date = '2016/01/02' 不工作?

c# - 获取表的架构

c# - Entity Framework - 'providerInvariantName' 参数需要非空字符串

.net - ADO.NET 是在 .net 中访问数据库的唯一本地方式吗?

java - Android https 长轮询 : Cannot receive response when polling interval is longer than 70 seconds

c# - 在 Entity Framework 中将 1 映射到 0-1

php - IIS PHP 使用 Windows 身份验证连接到 MSSQL

javascript - AngularJS $timeout 的工作方式不同

c# - 如何在异步 ASP.NET Web 服务调用上定义客户端超时?