【问题标题】:Parallelize TSQL CLR Procedure并行化 TSQL CLR 过程
【发布时间】:2011-07-29 21:38:00
【问题描述】:

我试图弄清楚如何并行化一些程序代码以在表中创建记录。

情况如下(抱歉,我无法提供太多实际代码):

我必须根据之前的服务日期、当前里程、计划的每日里程以及每次服务之间的里程差来预测何时需要车辆服务。

总而言之 - 这是非常程序化的,对于每辆车,我都需要考虑它的历史、当前的维修状态、每日里程(可以根据里程计划中定义的范围而变化)以及维修顺序.

目前我正在用 PHP 计算所有这些,100 辆车大约需要 20 秒。由于将来可能会扩展到数千个,因此 20 秒太长了。

所以我决定尝试在 CLR 存储过程中执行此操作。起初我以为我会尝试多线程,但是我很快发现在 TSQL 主机中做起来并不容易。有人建议我让 TSQL 自己解决并行化问题。但是我不知道怎么做。如果不是因为代码需要创建记录,我可以将它定义为一个函数并执行以下操作:

SELECT dbo.PredictServices([FleetID]) FROM Vehicles

TSQL 应该会发现它可以并行化,但我知道没有其他程序可供选择。

我能做些什么来并行化这个吗?

【问题讨论】:

    标签: tsql clr parallel-processing sqlclr clrstoredprocedure


    【解决方案1】:

    您收到的推荐是正确的。您的 CLR 存储过程中根本没有用于并行性的 .NET 框架工具。另外请记住,CLR 存储过程的应用范围相当狭窄,它们会对 SQL Server 的性能和可伸缩性产生不利影响。

    如果我正确理解任务,您需要为某些记录计算函数 PredictServices 并将结果存储回数据库。在这种情况下,您可以选择 CLR 存储过程,前提是 PredictServices 只是数据访问/数据的直接转换。最佳实践是创建 WWF (Windows Workflow Foundation) 服务来执行计算并从 PHP 调用它。在 Workflow Service 中,您可以实施任何解决方案,包括涉及并行性的解决方案。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2020-04-17
      • 2010-09-08
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多