我是 SSIS 新手,正在编写我的第一个 SSIS 包。
在我的包中,数据流中有几个转换阶段,每个阶段都有一个脚本组件将记录(某种自定义日志)插入到 ADO.NET 目标。
我正在使用多个指向同一个数据库中同一个表的 ADO.NET 目标组件。
我想知道这是否是一种正确的方法,或者我是否应该使用 Union ALL 并一次插入所有记录。
任何帮助,将不胜感激。
我是 SSIS 新手,正在编写我的第一个 SSIS 包。
在我的包中,数据流中有几个转换阶段,每个阶段都有一个脚本组件将记录(某种自定义日志)插入到 ADO.NET 目标。
我正在使用多个指向同一个数据库中同一个表的 ADO.NET 目标组件。
我想知道这是否是一种正确的方法,或者我是否应该使用 Union ALL 并一次插入所有记录。
任何帮助,将不胜感激。
从性能的角度来看,如果您在 SSIS 中将结果合并在一起并将它们插入到数据库中,您希望获得非常小的性能提升,因为您只会创建一个到实例/数据库的连接,具体取决于何时脏页被写入磁盘是可能的,但绝不保证磁头可能需要在主轴上移动的次数更少。
我认为这里更重要的是自定义日志记录是什么?如果日志记录记录了您在包中的距离、在某个阶段更新了多少记录等,那么我强烈建议不要在包中使用 UNION,因为以下原因在最后将它们全部插入。
想象一下这样一种情况,当包裹在中途掉落时,您的任务是首先诊断问题,然后修复一些因故障而损坏的数据。如果你把所有的日志都写在最后,而打包还没有完成,那么日志就不会被写,你的任务就会困难很多。
相反,我会将 ADO 连接管理器设置为保留相同的连接。这样,连接将始终保持打开状态,您将不必重新连接。
我认为 Union All 然后一次 insert all 更好。
它将使您的 ssis 清晰并获得更好的性能。(据我所知,SSIS 将使用服务器资源而不是数据库资源,对吧?)