【问题标题】:continue with next iteration if foreach loop takes too long如果 foreach 循环时间过长,则继续下一次迭代
【发布时间】:2016-03-02 15:05:36
【问题描述】:

我有一个 for each 循环,可以从带有查询的表中提取查询。 然后循环执行每个查询并将结果写入表。 这就像一个魅力。我什至实现了查询无法执行时的错误处理(例如,如果它确实有语法错误)。

但有时执行一个查询会花费很长时间,例如一个没有适当困境的交叉连接查询。

现在我希望能够设置查询执行的最大持续时间。这样查询将在 x 分钟后停止(如果那时还没有完成)。 然后循环应该继续下一个查询。 换句话说,一次迭代的时间永远不会超过 X 分钟,之后它应该继续下一次迭代。

有什么想法、建议吗?

【问题讨论】:

  • 请提供sqlplan格式的查询和执行计划...
  • SQL顺序执行查询,不能并行执行,你可能需要去c#并行执行查询,我相信ssis也有能力并行执行子容器
  • @devart 目前有 462 个查询。可以添加和删除查询。所以我需要为技术上合理但将永远运行的查询计划。我认为 sqlplan 不会有帮助,因为所有这些查询只有一个共同点:SELECT。 FROM、WHERE 和其他组件都可以不同。
  • @TheGameiswar 我不明白你的建议:我希望它们按顺序运行,因为它们都插入到同一个表中,但我想在指定的时间后停止循环并继续下一个循环。并行执行与此有什么关系?

标签: sql-server ssis sql-server-2012 ssis-2012


【解决方案1】:

不能为服务器上的查询设置超时。

您可以创建一个客户端应用程序,您可以在其中为 sql 命令设置 timeout

 SqlCommand command = new SqlCommand(queryString, connection);
         // Setting command timeout to 1 second
         command.CommandTimeout = 1;
         try {
            command.ExecuteNonQuery();
         }

或者试试这个External Tool 来监控查询并在时间用完时终止这些进程。如 dba.stackexchange

所述

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多