Sql server 2008 如何使此SSIS场景更加并行
我在一个数据库表中有一百万行。对于每一行,我必须运行一个自定义exe,解析输出并更新另一个数据库表 如何并行运行多行进程 我现在有一个简单的数据流任务->获取数据->运行脚本运行进程,解析输出->存储数据Sql server 2008 如何使此SSIS场景更加并行,sql-server-2008,ssis,Sql Server 2008,Ssis,我在一个数据库表中有一百万行。对于每一行,我必须运行一个自定义exe,解析输出并更新另一个数据库表 如何并行运行多行进程 我现在有一个简单的数据流任务->获取数据->运行脚本运行进程,解析输出->存储数据 对于6000行,它花费了3个小时。太多了。如果使用数据流容器执行此过程,则其上有一个名为EngineThreads的属性,默认值为5。您可以将其设置为更高的数字,如20,这将花费更多的线程来处理这些行 这只是一个性能调整或优化,如果您的ssis包运行速度仍然很慢,那么我可能会介绍包的体系结构和
对于6000行,它花费了3个小时。太多了。如果使用数据流容器执行此过程,则其上有一个名为EngineThreads的属性,默认值为5。您可以将其设置为更高的数字,如20,这将花费更多的线程来处理这些行
这只是一个性能调整或优化,如果您的ssis包运行速度仍然很慢,那么我可能会介绍包的体系结构和设计。如果您使用数据流容器执行此过程,则其上有一个名为EngineThreads的属性,默认值为5。您可以将其设置为更高的数字,如20,这将花费更多的线程来处理这些行
这只是一个性能调整或优化,如果您的ssis包运行速度仍然很慢,那么我可能会讨论您的包的体系结构和设计。这里有一个瓶颈,即每行运行一个进程。增加EngineThreads不会有任何帮助,因为无论如何只有一个线程运行这个特定的脚本转换。在其他转换中花费的时间可能根本不重要。进程是很重的对象,运行数千个进程永远不会便宜 我可以想出以下想法使它更好: 1解决此问题的最佳方法是将自定义EXE转换为程序集,并从脚本转换中调用它-以避免创建进程、解析输出等的开销 2如果必须使用单独的进程,可以尝试并行运行这些进程。如果进程主要等待一些输入/输出,即它是i/O绑定的,那么它会有所帮助。如果进程是内存受限的或CPU受限的,那么并行运行它们不会带来太多好处 2A复杂的脚本,简单的包 要并行运行它们,请修改脚本中的ProcessInput方法以异步启动流程,不要等待流程完成—移动到下一行并创建下一个流程。订阅进程输出和进程退出事件,以便您知道它何时完成。限制并行运行的进程数-否则将耗尽内存。等待所有进程完成,然后从ProcessInput调用返回 简单的脚本,复杂的包 保留当前的顺序脚本,但使用SSI对数据进行分区。添加条件拆分转换,并基于某个哈希表达式将输入流拆分为多个流—这将使每个输出接收大致相同的数据量。流的数量等于要并行运行的进程实例的数量。将脚本转换添加到条件拆分的每个输出中。现在您还应该增加引擎线程属性:这些转换将并行运行。注意:基于标记,我假设您使用SSIS 2008。您需要插入额外的Union All转换,以使其在SSIS 2005中工作
这应该会使它的性能更好,但数百万个进程是很多的。这里很难获得真正好的性能。这里有一个瓶颈,每行运行一个进程。增加EngineThreads不会有任何帮助,因为无论如何只有一个线程运行这个特定的脚本转换。在其他转换中花费的时间可能根本不重要。进程是很重的对象,运行数千个进程永远不会便宜 我可以想出以下想法使它更好: 1解决此问题的最佳方法是将自定义EXE转换为程序集,并从脚本转换中调用它-以避免创建进程、解析输出等的开销 2如果必须使用单独的进程,可以尝试并行运行这些进程。如果进程主要等待一些输入/输出,即它是i/O绑定的,那么它会有所帮助。如果进程是内存受限的或CPU受限的,那么并行运行它们不会带来太多好处 2A复杂的脚本,简单的包 要并行运行它们,请修改脚本中的ProcessInput方法以异步启动流程,不要等待流程完成—移动到下一行并创建下一个流程。订阅进程输出和进程退出事件,以便您知道它何时完成。限制并行运行的进程数-否则将耗尽内存。等待所有进程完成,然后从ProcessInput调用返回 简单的脚本,复杂的包 保留当前的顺序脚本,但使用SSI对数据进行分区。A. dd conditional split transform,并基于某个哈希表达式将输入流拆分为多个流—这将使每个输出接收大约相同数量的数据。流的数量等于要并行运行的进程实例的数量。将脚本转换添加到条件拆分的每个输出中。现在您还应该增加引擎线程属性:这些转换将并行运行。注意:基于标记,我假设您使用SSIS 2008。您需要插入额外的Union All转换,以使其在SSIS 2005中工作 这应该会使它的性能更好,但数百万个进程是很多的。你在这里很难有好的表现