我是第一次学习SSIS。我正在尝试将暂存数据库中的多个表加载到数据仓库中的多个表中。我的暂存数据库只不过是一个数据库,其中将所有源数据库中的所有表都复制到其中。我发现每个数据流任务只允许将一个源表连接到一个目标表。我必须使用与源数据库中的表数量一样多的数据流任务吗?有没有一种简单有效的方法来做到这一点?
据我了解,我需要一个空数据库,其中包含在 SQL Server 中创建的空 Dim 和 Fact 表,它将充当目标数据仓库并从暂存数据库接收数据。因此我已经创建了这个空的数据仓库。请帮忙。
没有约定在 DFT(数据流任务)中只需要 1 个源和 1 个目标。
您可以在 DFT 中拥有多个源和目标组件。但是,如果单个 DFT 中有太多源到目标组件,则可能会耗尽内存。在预执行阶段,SSIS 必须决定为各个 S2D 组件分配的内存,如果内存消耗太高,那么服务器可能无法为所有组件授予足够的内存。这可能会导致长时间的等待。
但是,有一个称为EngineThreads
DFT 的属性,它定义了数据流引擎可以创建和并行运行的线程数。根据 MSDN:
要了解此属性的工作原理,请考虑包含三个数据流任务的示例包。每个数据流任务包含十个源到目标执行树。如果在每个数据流任务上将 EngineThreads 设置为 10,则所有 30 个执行树都可能同时运行。但是,一般规则是并行运行的线程数不要超过可用处理器的数量。由于线程之间频繁的上下文切换,运行的线程多于可用处理器的数量可能会降低性能。
因此最好创建单独的数据流任务并执行操作。
注意:如果您从多个来源获取数据,则可以在单个数据流任务中完成。