我是SSIS的新手,我正在编写我的第一个SSIS包。
在我的包中,在数据流中有几个转换阶段,每个阶段脚本组件都将记录(某种自定义日志)插入到ADO.NET目的地。
我正在使用多个指向同一数据库中同一个表的ADO.NET Destination组件。
我想知道这是否是一种正确的方法,或者我是否应该使用Union ALL并立即插入所有记录。
任何帮助都将不胜感激。
答案 0 :(得分:1)
从性能角度来看,如果您在SSIS中将结果联合起来并将它们插入数据库中,您希望获得非常小的性能提升,因为您只会创建一个与实例/数据库的连接,根据脏页写入光盘的时间,这是可能的,但绝不是因为头部可能需要在主轴上移动的次数较少。
我认为更重要的是自定义日志记录是什么?如果日志记录正在记录你的包裹有多远,在某个阶段已经更新了多少记录等等,那么我强烈建议不要将UNION打包在最后,因为以下原因将它们全部插入。
想象一下这样一种情况:当程序包超过一半时,你的任务是首先诊断问题,然后修复一些由于失败而损坏的数据。如果您在最后编写了所有日志条目,并且软件包尚未完成,则不会写入日志条目,并且您的任务将更加困难。
相反,我会设置ADO连接管理器以保持相同的连接。这样,连接将始终保持打开状态,您不必承担重新连接的开销。
答案 1 :(得分:0)
我认为Union All然后一次性插入更好。
它将使您的ssis明确并获得更好的表现。 (据我所知,SSIS将使用服务器资源而不是数据库资源,对吗?)