SSIS多表插入与Union ALL

4

我刚接触SSIS,正在编写我的第一个SSIS包。

在我的包中,数据流经历了几个转换阶段,对于每个阶段,脚本组件都会向ADO.NET目标插入记录(某种自定义日志)。

我使用了多个ADO.NET目标组件指向同一数据库中的同一表。

我想知道这是否是正确的方法,或者我应该使用Union ALL一次性插入所有记录。

任何帮助将不胜感激。


问题没有意义... - Mitch Wheat
2个回答

1

从性能角度来看,如果您在SSIS中将结果联合起来,然后一次性将它们插入数据库,您可能会获得非常小的性能提升,因为您只会创建一个连接到实例/数据库,并且根据脏页何时写入磁盘,可能但并不保证磁头需要移动的次数更少。

我认为这里更重要的是自定义日志记录的目的是什么?如果日志记录正在记录包完成的进度、在某个阶段更新了多少条记录等信息,那么我强烈建议不要在包中使用UNION,而是在最后插入所有记录,原因如下。

想象一种情况,当包在中途失败时,您的任务是首先诊断问题,其次修复由于故障而损坏的某些数据。如果您在最后编写所有日志条目,并且包尚未完成,则不会编写日志条目,您的任务将变得更加困难。

相反,我会将ADO连接管理器设置为保留相同的连接。这样,连接将始终保持打开状态,您就不必重新连接。


0

我认为使用 Union All 并一次性插入更好。

这会让你的 SSIS 更清晰,并获得更好的性能。(据我所知,SSIS 会使用服务器资源而不是数据库资源,对吗?)


“SSIS将使用服务器资源而非数据库资源” - 这是什么意思? - Mitch Wheat
例如,您正在Server-S上运行SSIS,所有联合作业都将使用Server-S的资源。 - Guoliang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接