我是SSIS的新手,我正在编写我的第一个SSIS包。
在我的包中,在数据流中有几个转换阶段,每个阶段都有一个脚本组件将记录(某种自定义日志)插入到ADO.NET目的地。
我使用的多个ADO.NET目标组件指向同一数据库中的同一个表。
我想知道这是不是一种正确的方法,或者我是否应该使用Union ALL并一次插入所有记录。
任何帮助都将不胜感激。
发布于 2012-09-26 14:45:09
从性能的角度来看,如果您将SSIS中的结果合并在一起,并将它们插入到数据库中,那么从性能的角度来看,您希望获得一个非常小的性能提升,因为您将只创建一个到实例/数据库的连接,并且根据脏页写入磁盘的时间,可以减少磁头在主轴上移动的次数,但绝不能保证这一点。
我认为这里更重要的是自定义日志记录的目的是什么?如果日志记录了您在包中走了多远,在某个阶段更新了多少记录,等等,那么我强烈建议不要在包中的UNION在最后插入它们,原因如下。
想象一下这样一个场景:包在半路上掉了下来,您的任务是首先诊断问题,然后修复由于故障而损坏的一些数据。如果您在最后写入所有日志条目,而包尚未完成,则日志条目将不会被写入,您的任务将变得更加困难。
相反,我会将ADO连接管理器设置为保留相同的连接。这样,连接将在整个时间内保持打开,您将不会有必须重新连接的开销。
发布于 2012-09-26 12:08:11
我认为Union All,然后一次插入所有内容更好。
这将使您的ssis清晰,并获得更好的性能。(据我所知,SSIS将使用服务器资源而不是数据库资源,对吧?)
https://stackoverflow.com/questions/12594359
复制相似问题