1

我是 SSIS 的新手,正在尝试使用它的并行功能从数据库中导入数据。

我的工作是做到这一点:尽快将一个多 TB 的数据库导入一组平面文件。

我在想这个:

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

然后我遇到了 SSIS,以及它的并行导入功能。我的 SSIS 服务器不是很高端——只有 4GB 的机器。我有点倾向于使用 SSIS,因为这是 Microsoft 进行数据导入的理想方式——而且我不必重写很多东西,也不必使用现有的转换等。

使用自定义任务(或可用任务)并并行导入的最佳方式是什么?

4

2 回答 2

1

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

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

  1. 多个同时 DFT 解决方案:具有一个连接管理器的单个 SSIS 包指向源 SQL Server 数据库,许多连接管理器每个都指向一个单独的目标文件,每个目标文件加上一个 DFT。DFT 都相互断开(没有优先约束或绿/红/蓝线/箭头)。如果有前或后 ETL 步骤需要运行以并行化这些 DFT 的好方法是将它们全部放入序列容器中,该容器通过优先约束/箭头连接到较早和较晚的任务。这些在它们自己的序列容器中断开连接的 DFT 将尝试全部同时运行。
  2. 多个同时 DTEXEC 解决方案:多个 SSIS 包,每个包都有自己的目标文件特定 DFT。您可以通过单独的 CMD 窗口或通过 GUI 手动运行单独的 DTEXEC 进程。下面的#3 是这个解决方案的一个变体,可能是一个更好的解决方案。
  3. 运行多个子包的父主包解决方案:将上面#2 中开发的每个目标文件包包装在一个父主包中。在父包中有多个同时运行的执行包任务。同样,这些执行包任务将与其他任务断开连接。一个很好的方法是将多个执行包任务放在它们自己的序列容器中。和以前一样,如果执行包任务断开连接(没有优先约束/箭头),它们都将尝试同时运行。

查看 Microsoft SQLCAT 团队的这篇优秀文章,了解更多想法/见解:SQL Server 集成服务最佳实践 10 强

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

于 2011-05-19T22:10:17.827 回答
0

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

无需修改大部分包

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

于 2011-12-21T04:02:09.730 回答