我是SSIS的新手,想知道哪些会在数据工作流程中执行插入时提供更好的性能。
使用一个优于另一个有什么好处吗?
答案 0 :(得分:2)
它们具有相似的命名转换,但用途却大不相同。目的地就像它听起来一样 - 它是数据流的终点。您无法将任何内容连接到OLE DB目标的输出(超出错误流)。目标可以执行基于 set 的插入(这对于良好的性能非常重要)。它还可以执行单例插入(为流经数据流的每个行发出一个插入语句),这将导致到目标的吞吐量降低。
将该行为与OLE DB命令进行对比。这是一个转换组件,允许您为流经数据流的每一行执行任何操作。这是瑞士军刀SQL“实干家”。您可以将其用作INSERT语句,但最常见的是我将其视为UPDATE目标。对于小数据集,这很好。使用OLE DB命令转换的成本是成本。它将为流经数据集的每一行发出单例语句。在事务日志,持有的事务时间,计划缓存以及许多其他我无法想到的事情方面,这将是代价高昂的。没有办法告诉SQL Server批处理这些操作,所以你将被简化为通过痛苦行(RBAR)发出一个语句行。
如果您需要在SSIS中进行更新,则可以通过将更新写入临时表,然后在数据流完成后执行基于集的更新来获得更好的性能配置文件。 Andy Leonard在他的Stairway to Integration Services series上有很多文章讨论这种模式。
参考
答案 1 :(得分:1)
OLE目标是插入的最佳选择,因为它允许将大量数据加载到目标表中。
OLE DB命令(我假设是OLE命令任务的意思)将逐行执行其操作,这显然较慢。但是,OLE DB命令可以处理OLE目标不能
的更新和删除