我是SSIS的新手,我想知道在数据工作流中执行插入时,哪种方法会有更好的性能。
使用一种比使用另一种有什么优势吗?
发布于 2012-07-30 22:53:53
它们被命名为相似的转换,但用途却截然不同。目的地就是它听起来的样子--它是数据流的终点站。不能将任何内容连接到OLE DB目标的输出(错误流之外)。目标能够执行基于集合的插入(这对于良好的性能非常重要)。它还可以执行单例插入(为流经数据流的每个行发出一条insert语句),这将导致到目的地的吞吐量降低。
将这种行为与OLE DB命令进行对比。这是一个转换组件,它允许您对流经数据流的每一行执行所需的任何操作。这是一把瑞士军刀SQL的“实干家”您可以将其用作INSERT语句,但最常见的情况是我将其视为更新目的地。对于较小的数据集,这是很好的。使用OLE DB命令转换的成本就是成本。它将为流经数据集的每一行发出单例语句。这将在事务日志、事务保持时间、计划缓存和许多其他我无法想象的事情方面付出高昂的代价。没有办法告诉SQL Server对这些操作进行批处理,因此您只能通过痛苦的row (RBAR)发出一个语句行。
如果需要在SSIS中进行更新,则通过将更新写入临时表,然后在数据流完成后执行基于集合的更新,可以获得更好的性能配置文件。Andy Leonard在他的Stairway to Integration Services series上有一系列很好的文章讨论了这种模式。
参考文献
发布于 2012-07-30 22:54:13
OLE目标是插入的更好选择,因为它允许将数据大容量加载到目标表中。
OLE DB命令(我假设这就是您所说的OLE命令任务)将逐行执行其操作,这会大大减慢速度。但是,OLE DB命令可以处理OLE目标不能处理的更新和删除
https://stackoverflow.com/questions/11723123
复制相似问题