我创建了一个 ETL,该 ETL 已经增长到填充大约 250 个表(暂存表、维度表和事实表)。
我从 Stacia Meisner 那里得到了 ETL 设计模式,她的 ETL 设计模式基于创建一个模板包,用于加载临时表、加载维度表,然后加载事实表。这个想法是使用您在特定包中设置的变量,然后调用适当的存储过程,创建沿袭和审计数据,使用表达式填充正确的表等,以便您只需将模板包复制并粘贴到您的解决方案中,编辑变量,只要您有存储过程来获取数据和正确的表名,一切都会完美运行。
那是......直到我达到250张桌子。当我在 BIDS 中运行 ETL 时,它会疯狂地消耗 RAM。当我部署 ETL 并在 SQL 中执行它时,它没有。在我的笔记本电脑上运行 ETL 可能会消耗大约 3 到 4 GB 的 RAM,因为它会从父包打开我的每个子包。我的解决方案中现在有 250 个包。
我可以增加笔记本电脑的 RAM(目前为 8GB 或 RAM),但我脑海中肯定会响起警告警报,这让我认为也许 250 个数据流任务会是一个更好的选择。
现在了解这种设计模式的缺陷,我想我的问题如下
- BIDS 是否曾经打算在 ETL 中执行如此多的包?
- 当我在 IDE 中运行 ETL 时,有什么方法可以减少 RAM 的消耗?
- RAM 的消耗是可以预期的,如果是这样,开发人员通常如何处理它。我可以通过从不在我的 IDE 中运行整个 ETL 来轻松解决它,而是对其进行部分测试,然后将其整体部署
- 我是否应该放弃每表 1 个包的设计模式并在 3 个包中实现数据流任务(1 个用于加载临时表,1 个用于加载维度,1 个用于加载我的事实表)
感谢您抽出宝贵时间,非常感谢您的意见。
问候,
杰西