首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server在小时间窗口中复制数据和转换

Server在小时间窗口中复制数据和转换
EN

Stack Overflow用户
提问于 2014-01-09 21:04:12
回答 1查看 140关注 0票数 1

我们有一个Server 2008数据库。数据库需要从3台不同的服务器复制数据。一旦数据被复制,我们就进行数据转换(去规范化等)。

数据是使用运行在一个小夜间窗口(3小时)中的SSIS包复制的。例如:

  • 作业A在1-2之间运行
  • 工作B 2-3
  • 工作4 2-3

这引起了以下几个问题:

  • 随着数据的增长,作业A不能完成2,作业B开始并失败
  • 在某些日子里,作业会在维护窗口之外运行。
  • 每个数据复制作业都会创建一些其他SQL作业。
  • 由此产生的SQL作业发生冲突,从而导致错误。

我想解决这个问题的一种方法是--使用独立的暂存数据库,它将整天复制数据,然后将SQL复制设置到生产数据库中。

我们还需要一个排队系统,以便作业可以具有优先级、依赖性等,因为有些作业是顺序的,有些作业可以并行运行。

还有其他更好的方法来解决这个问题吗?如能就我们的选择提供任何帮助,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 02:31:08

你能发布更多关于这个声明的信息吗?

“随着数据的增长,作业A不能完成2,作业B开始并失败”。

详细列出错误消息将有帮助。我想知道的是.

1)您的错误是由于硬件资源的限制吗?

2)能否通过在SSIS中将优先约束添加到您的包中来解决这个问题?

( 3)两者都在发生吗?

如果我假设至少可以通过在SSIS包中添加Precedence约束来解决部分问题,那么经常会遇到这样的情况:

我有几个软件包,它们自己运行很好,就像单独运行时一样。然而,当他们一起跑的时候,他们就不能很好地相处。更重要的是,我真的没有心情,我也没有时间重新设计/重构这几个软件包为一个大的包,需要优先约束。

当发生这种情况时,这个解决方案就会出现:

  1. 创建一个新的“父”包
  2. 执行包任务添加到父包以调用子包
  3. 使用优先级约束,根据硬件资源和数据模型的要求,约束每个子包以尽可能多的或尽可能少的并行度运行。

这个父包中不包含,没有数据流任务。相反,它的唯一目的是管理控制流逻辑。如果这给了您所需的性能,而不是简单地用作真正需要完成的包重构的工作,那么这是一个可行的选择。可以肯定的是,这是一个尝试和错误的问题,使它“正确”。

一般来说,我更喜欢以控制流为主题的父包,而不是复杂的Server代理作业,因为我认为SSIS更易于配置,提供了更多的灵活性,这种方法允许您将ETL逻辑封装在SSIS中,而不是通过SSIS和SQL Server Agent扩展它。对于我的许多ETL任务,我对Server代理的使用归结为调度和调用控制流主题父包的一个简单步骤。

我想说的是,使用独立的分期表作为解决问题的方法也是值得研究的。这更像是一个数据模型的事情,最好留给你,数据模型专家。如果当前的数据模型不允许包并行运行,这种方法可能会有所帮助(例如,几个进程通过批量插入将数据插入到同一表中)。但是,如果性能的根本问题是硬件资源约束,则多个暂存表解决方案并不是一个很好的选择。

我想,为了最终找到最佳性能,您可能会同时使用这两种解决方案,并且可能会为您的ETL请求额外的硬件资源。

如果你的问题中没有更多的细节,就很难知道该说些什么。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21031078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档