【问题标题】:SQL timeout expired on fast query快速查询时 SQL 超时已过期
【发布时间】:2011-07-16 13:00:19
【问题描述】:

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

我不断收到以下超时异常:

 System.Data.SqlClient.SqlException:

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

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

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

当我直接在 SQL Server Management Studio 中运行相同的查询时,它们的运行时间不到一秒。

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

当我尝试使用 SQL Server 分析器时,它只是说批处理/RPC 已完成。

为什么我会随机收到此异常?

【问题讨论】:

    标签: c# sql exception timeout


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我设法通过将所有内容都放入事务中来解决问题,而不仅仅是其中的一部分 - 现在我从一开始就对我需要的所有表进行了读锁,从而避免了阻塞问题.
        【解决方案4】:

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

        另一个原因可能是有一些 数据库中的锁 阻止了您的查询执行。使用sp_lock, sp_who, sp_who2 检查表中是否有任何锁。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-14
        • 2016-11-28
        • 2015-12-13
        • 2017-11-26
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多