我们有一个Server 2008数据库。数据库需要从3台不同的服务器复制数据。一旦数据被复制,我们就进行数据转换(去规范化等)。
数据是使用运行在一个小夜间窗口(3小时)中的SSIS包复制的。例如:
这引起了以下几个问题:
我想解决这个问题的一种方法是--使用独立的暂存数据库,它将整天复制数据,然后将SQL复制设置到生产数据库中。
我们还需要一个排队系统,以便作业可以具有优先级、依赖性等,因为有些作业是顺序的,有些作业可以并行运行。
还有其他更好的方法来解决这个问题吗?如能就我们的选择提供任何帮助,我们将不胜感激。
发布于 2014-01-12 02:31:08
你能发布更多关于这个声明的信息吗?
“随着数据的增长,作业A不能完成2,作业B开始并失败”。
详细列出错误消息将有帮助。我想知道的是.
1)您的错误是由于硬件资源的限制吗?
或
2)能否通过在SSIS中将优先约束添加到您的包中来解决这个问题?
或
( 3)两者都在发生吗?
如果我假设至少可以通过在SSIS包中添加Precedence约束来解决部分问题,那么经常会遇到这样的情况:
我有几个软件包,它们自己运行很好,就像单独运行时一样。然而,当他们一起跑的时候,他们就不能很好地相处。更重要的是,我真的没有心情,我也没有时间重新设计/重构这几个软件包为一个大的包,需要优先约束。
当发生这种情况时,这个解决方案就会出现:
这个父包中不包含,没有数据流任务。相反,它的唯一目的是管理控制流逻辑。如果这给了您所需的性能,而不是简单地用作真正需要完成的包重构的工作,那么这是一个可行的选择。可以肯定的是,这是一个尝试和错误的问题,使它“正确”。
一般来说,我更喜欢以控制流为主题的父包,而不是复杂的Server代理作业,因为我认为SSIS更易于配置,提供了更多的灵活性,这种方法允许您将ETL逻辑封装在SSIS中,而不是通过SSIS和SQL Server Agent扩展它。对于我的许多ETL任务,我对Server代理的使用归结为调度和调用控制流主题父包的一个简单步骤。
我想说的是,使用独立的分期表作为解决问题的方法也是值得研究的。这更像是一个数据模型的事情,最好留给你,数据模型专家。如果当前的数据模型不允许包并行运行,这种方法可能会有所帮助(例如,几个进程通过批量插入将数据插入到同一表中)。但是,如果性能的根本问题是硬件资源约束,则多个暂存表解决方案并不是一个很好的选择。
我想,为了最终找到最佳性能,您可能会同时使用这两种解决方案,并且可能会为您的ETL请求额外的硬件资源。
如果你的问题中没有更多的细节,就很难知道该说些什么。希望这能有所帮助。
https://stackoverflow.com/questions/21031078
复制相似问题