C# 快速查询的SQL超时已过期

C# 快速查询的SQL超时已过期,c#,sql,exception,timeout,C#,Sql,Exception,Timeout,我在一个SQL数据库中做一些繁重的工作,来自C# 我一直收到以下超时异常: 超时已过期。超时时间 在完成测试之前经过 操作或服务器不可用 回应。 声明已终止 我运行了大量的查询(100k+),并不是任何一个特定的查询导致了异常——有时我会设法毫无例外地完成所有查询 一些异常来自作为更大事务的一部分运行的查询,其中一些异常来自单独运行的查询 当我直接在SQLServerManagementStudio中运行相同的查询时,运行它们所需的时间不到一秒钟 我对所有查询都使用samme SQLConnec

我在一个SQL数据库中做一些繁重的工作,来自C#

我一直收到以下超时异常:

超时已过期。超时时间 在完成测试之前经过 操作或服务器不可用 回应。 声明已终止

我运行了大量的查询(100k+),并不是任何一个特定的查询导致了异常——有时我会设法毫无例外地完成所有查询

一些异常来自作为更大事务的一部分运行的查询,其中一些异常来自单独运行的查询

当我直接在SQLServerManagementStudio中运行相同的查询时,运行它们所需的时间不到一秒钟

我对所有查询都使用samme SQLConnection对象,但对每个查询都使用新的SQLCommand对象

当我尝试使用SQLServer探查器时,它只是说批处理/RPC已经完成


为什么我会随机得到这个异常

您可以尝试增加连接字符串中的超时间隔,并检查一次


另一个原因可能是DB中有一些锁阻碍了查询的执行。使用sp_lock、sp_who、sp_who2检查表中是否有锁

这可能是由于阻塞造成的——也许在它超时的时候,它正被另一个等待释放锁的进程阻塞。这可以解释为什么它看起来是随机的,因为它取决于当时发生的事情。

我同意其他建议,检查阻塞/锁定,并查看使用过程中发生的情况。我当然也会对服务器进行健康检查——检查SQL和NT日志,确保SQL有足够的内存,并检查等待状态,以尽量减少它们。

最可能的解释是锁。如果您正在进行更新、插入和/或删除,请对此进行特别分析。重新安排查询可以解决问题。

我通过将所有内容放在事务中而不是仅将部分内容放在事务中来解决问题-现在我从一开始就读取了所有需要的表上的锁,从而避免了阻塞问题。使用
sp_who4
显示实际查询:
 System.Data.SqlClient.SqlException: