SSIS并行 - Microsoft HPC群集?

时间:2011-05-19 08:51:56

标签: sql-server ssis soa hpc parallel-processing

我是SSIS的新手,我正在尝试使用其Parallelism Feature从数据库导入数据。

我的工作是:尽可能快地将多TB数据库导入到一组平面文件中。

我在想这个:

我有一个Microsoft Server 2008 HPC群集(3个节点)供我使用。我正在考虑编写HPC SOA作业,以便所有三个计算节点可以与SQL Server建立独立连接并并行导入一部分数据。当然,这与SSIS无关,是一个独立的实用工具。

然后我遇到了SSIS及其并行导入功能。我的SSIS服务器不是很高端 - 只有4GB的机器。我不知何故倾向于使用SSIS,因为这是微软进行数据导入的理想方式 - 我不需要重写很多东西,也可能使用现有的转换等。

使用自定义任务(或可用任务)的最佳方法是什么?并行执行此操作?

2 个答案:

答案 0 :(得分:1)

Gitmo,我可能会误解你的问题,但会给它一个机会。您需要将数据从SQL Server实例移动到多个文件,对吗?您希望利用SSIS提供的并行化数据移动功能。这意味着多个同时运行的数据流任务(DFT)。对于每个目标文件,由于并发写入问题,您只能有一个DFT。

要获得多个同时运行的数据流任务,其中源是SQL Server数据库,而目标是一组文件,您可以尝试以下方式(请注意,您可以从中获取并行化的上限) SSIS基于许多因素,包括您的CPU核心数,是否在BIDS / Visual Studio中运行,以及包,服务器,SQL Server实例和许多其他注意事项中的各种设置:

  1. 多个同时DFT解决方案:单个SSIS包,其中一个连接管理器指向源SQL Server数据库,许多连接管理器均指向单独的目标文件,每个目标文件加一个DFT。 DFT彼此断开连接(没有优先约束或绿/红/蓝线/箭头)。如果存在需要运行并行化这些DFT的好方法的前或后ETL步骤,则将它们全部放入通过优先约束/箭头连接到早期和后续任务的序列容器中。这些断开连接的DFT在它们自己的Sequence Container中将尝试同时运行。
  2. 多个同时DTEXEC解决方案:多个SSIS包,每个包都有自己的目标文件特定DFT。您可以通过单独的CMD窗口或通过GUI手动运行单独的DTEXEC进程。下面的#3是此解决方案的变体,可能是更好的解决方案。
  3. 运行多个子包的父主包解决方案:将上面#2中开发的每个目标文件包包装在一个父主包中。在Parent包中有多个同时运行的Execute Package Tasks。同样,这些执行包任务将与其他任务断开连接。执行此操作的一种好方法是将多个执行包任务放在它们自己的Sequence Container中。如前所述,如果执行包任务被断开(没有优先约束/箭头),他们都将尝试同时运行。
  4. 请参阅Microsoft SQLCAT小组的这篇优秀文章,了解更多想法/见解:Top 10 SQL Server Integration Services Best Practices

    这些相同的想法可能存在差异,并且可能在SSIS内部和外部提供其他解决方案。祝你好运!

答案 1 :(得分:0)

请看这篇文章.....使用多线程输出侧面并实现并行性多线程串行执行

没有修改大部分包

http://sqljunkieshare.com/2011/12/21/parallelism-in-etl-process-ssis-2008-and-ssis-2012/