我在SQL数据库中做了一些繁重的工作,来自C#。
我一直收到以下超时异常:
System.Data.SqlClient.SqlException:
超时已过期。超时期限 在完成之前已经过去了 操作或服务器不是 响应。 声明已经终止。
我运行了大量的查询(100k +),并且不是任何一个导致异常的特定查询 - 有时我设法完成所有查询而没有异常。
一些例外来自作为更大事务的一部分运行的查询,其中一些来自自己运行的查询。
当我直接在SQL Server Management Studio中运行相同的查询时,运行时间不到一秒。
我将samme SQLConnection对象用于所有查询,但每个查询使用新的SQLCommand对象。
当我尝试使用SQL Server探查器时,它只是说批处理/ RPC已经完成。
为什么我会随机获得此异常?
答案 0 :(得分:3)
您可以尝试增加连接字符串中的超时间隔并检查一次。
另一个原因可能是DB 中存在一些阻止查询执行的锁定。使用sp_lock, sp_who, sp_who2
检查表中是否有锁。
答案 1 :(得分:2)
这可能是由于阻塞 - 也许是它超时的时候,它被另一个正在等待释放锁的进程阻止。这可以解释为什么它看似随意,因为它取决于当时正在发生的事情。
答案 2 :(得分:0)
我同意其他建议来检查阻塞/锁定,并查看使用过程中发生的情况。我当然也会在服务器上进行健康检查 - 检查SQL和NT日志,确保SQL有足够的内存,并检查等待统计信息,以便尝试最小化它们。
答案 3 :(得分:0)
最可能的解释是锁。如果您正在进行更新,插入和/或删除,请特别分析。重新安排查询可以解决问题。