并行化TSQL CLR过程

并行化TSQL CLR过程,tsql,clr,parallel-processing,sqlclr,clrstoredprocedure,Tsql,Clr,Parallel Processing,Sqlclr,Clrstoredprocedure,我试图找出如何并行化一些过程代码来创建表中的记录 情况如下(很抱歉,我不能提供太多实际代码): 我必须根据以前的保养日期、当前里程、计划的每日里程以及每次保养之间的里程差,预测何时需要进行车辆保养 总而言之,这是非常程序化的,对于每辆车,我需要考虑它的历史记录、当前的维修状态、每日里程(可以根据里程计划中定义的范围进行更改)以及维修顺序 目前我用PHP计算所有这些,100辆车大约需要20秒。因为这可能在将来扩展到几千秒,所以20秒太长了 所以我决定尝试在CLR存储过程中实现它。起初我认为我应该尝

我试图找出如何并行化一些过程代码来创建表中的记录

情况如下(很抱歉,我不能提供太多实际代码):

我必须根据以前的保养日期、当前里程、计划的每日里程以及每次保养之间的里程差,预测何时需要进行车辆保养

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

目前我用PHP计算所有这些,100辆车大约需要20秒。因为这可能在将来扩展到几千秒,所以20秒太长了

所以我决定尝试在CLR存储过程中实现它。起初我认为我应该尝试多线程处理它,但是我很快发现在TSQL主机中做起来并不容易。有人建议我允许TSQL自己进行并行化。但我不知道怎么做。如果不是因为代码需要创建记录,我可以将其定义为函数并执行以下操作:

SELECT dbo.PredictServices([FleetID]) FROM Vehicles
TSQL应该知道它可以并行化,但我知道没有其他方法可以替代程序


我能做些什么来并行处理这个问题吗?

您收到的建议是正确的。您的CLR存储过程中根本没有可用于并行性的.NET framework工具。另外,请记住,CLR存储过程的范围非常狭窄,它们会对SQL Server的性能和可伸缩性产生负面影响

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