2014-01-09 27 views
1

我们有一个SQL Server 2008数据库。数据库需要从3个独立的服务器复制数据。一旦数据被复制,我们会进行数据转换(解除归一化等)SQL Server - 在小时间窗口中复制数据和转换

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

  • 作业A运行1-2作业B

    之间

  • 2-3
  • 工作4 2.3
这导致一些问题:

  • 随着数据的增长,作业A不能完成2,作业B开始并失败
  • 在某些日子里,作业在维护之外运行NCE窗口
  • 每个数据复制作业创建一些其他的SQL作业
  • 得到的SQL作业发生冲突导致的错误,我想解决这个问题是

一种方式 - 通过具有独立的临时数据库,它将整天复制数据,然后将SQL复制设置为生产数据库。

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

有没有其他更好的方法来解决这个问题?任何帮助我们的选择将不胜感激。

+1

你可能想要实现某种代理链接 - http://dba.stackexchange.com/questions/3605/chaining-sql-server-agent-jobs – OnoSendai

+0

我同意OnoSendai。如果服务器核心允许,尽快使用Parallelism(可能的话):http://technet.microsoft.com/en-us/library/dd795221(v=sql.100).aspx –

回答

0

您能发布有关此声明的更多信息吗?

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

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

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

2)它可以通过在SSIS加入Precedence Constraints到你的包来解决?

3)都发生了吗?

如果我承担,这个问题的一部分,至少可以通过在SSIS包添加优先约束,往往一个跑进情况需要解决的时刻是这样的:

我有细上运行的几个包他们自己就像是单独运行时一样。然而,当他们一起跑时,他们并不会很好地相处。还有什么我真的没有心情,也没有时间我需要重新设计/重构这几个包作为一个具有所需优先约束的大包。

发生这种情况时,该解决方案提出了自己:

  1. 创建一个新的“父”包
  2. 添加Execute Package tasks到父包打电话给你的孩子包
  3. 使用优先约束,约束每个孩子软件包运行的硬件资源允许和数据模型要求的并行度如下或更少

This Parent pa ckage将在其中有没有数据流任务。而是唯一的目的是管理控制流程逻辑。如果这给了你所需要的性能,而不是简单地将它用作真正需要完成的包重构的工作,那么这是一个可行的选择。确定这是一个试验和错误的问题,以使其“正确”。

一般来说,我会说我比较喜欢把复杂的SQL Server代理作业作为主控制包,因为我觉得SSIS配置比较简单,给你更多的灵活性,这种方法允许你封装你的ETL逻辑在SSIS中,而不是通过SSIS和SQL Server Agent进行分发。对于我的很多ETL任务,我对SQL Server代理的使用已经归结为调度和一个调用控制流主题Parent包的简单步骤。

我想说,使用单独的临时表作为解决问题的一种方法也值得研究。这是数据模型专家最关心的一个数据模型问题。如果您当前的数据模型不允许并行运行包,那么该方法可以提供帮助(例如,多个进程通过批量插入将数据同时插入到同一个表中)。但是,如果性能的根本问题是硬件资源约束,那么多个临时表解决方案并不是一个好选择。

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

很难知道什么建议没有更多的细节问题。希望这可以帮助。