【问题标题】:Timeout when I call a stored procedure in SQL Server 2008在 SQL Server 2008 中调用存储过程时超时
【发布时间】:2011-05-01 07:39:49
【问题描述】:

从带有 EF 的 C#,我用 ExecuteStoreCommand 调用一个长存储过程

程序开始后 30 秒,我有一个超时异常。

如何配置超时?在服务器上还是在我的 C# 客户端中?

谢谢

【问题讨论】:

    标签: c# sql sql-server stored-procedures timeout


    【解决方案1】:

    使用索引解决了我的问题,我发现使用 ExecuteStoreCommand 执行存储过程的时间与在 SQL 中不同。

    您可以使用 SQL Management Studio 来找到您需要的索引,选择存储过程的 sql 代码,右键单击并“显示估计的执行计划”获取建议的索引。这应该优化您的存储过程。

    【讨论】:

      【解决方案2】:
              using (var context = new MyDbEntities())
              {
                  context.CommandTimeout = 600;
                  context.MyLongRunningStoredProc();
              }
      

      【讨论】:

        【解决方案3】:
        using (var conn = new SqlConnection(ConnectionStrings.toMyDB))
        {
            conn.Open();
            using (var cmd = new SqlCommand("myProc", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandTimeout = 30; // Increase this to allow the proc longer to run
                cmd.Parameters.AddWithValue("@Param", myParam);
                cmd.ExecuteNonQuery();
            }
        }
        

        【讨论】:

        • Patrice Pezillier 询问 EF 中的超时问题,您的示例是 ADO.NET
        • 如何将结果传递给数据集?我现在正在使用这项技术。
        【解决方案4】:

        除了修复存储过程中的 SQL 之外,您所做的任何事情都只是掩盖了真正的问题(SQL)。

        您需要询问有关加快过程、发布表格的位置以及存储过程代码的问题,以便一劳永逸地修复它。

        【讨论】:

        • 那将是非常重要的信息放在原始帖子中,你不觉得吗?
        • 从单个存储过程调用中插入 100 万次??这是怎么回事???
        • 嗯,你是说 SQL 查询的时间永远不会超过 30 秒?
        • @Micah Burnett,如果您的应用程序需要超过 30 秒才能返回数据,那么是的,您有问题。您返回的数据过多、返回时间过长,或者尝试从用户界面执行后端批处理操作。
        • 同意返回UI的情况,但是是什么让你觉得他在UI而不是后台任务?
        【解决方案5】:

        您可以在底层连接上设置 CommandTimeout,但一个更好的主意是花时间和精力首先诊断超时发生的原因。

        即使您通过增加 CommandTimeout 来“解决”问题,也可能会导致数据库中出现其他阻塞问题。寻找阻塞查询或糟糕的查询计划,或设计不良的表和索引。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多