2

我在制作SSIS包裹时遇到问题。有人可以帮忙吗?
情况是这样的:我有两个表:A& B,结构是一样的。但它们存储在不同的服务器上。

我已经制作了一个包来SSIS传输数据(一次大约一百万行,需要一到两分钟)。AB

之后我想删除 tableA的数据,在转移到B. 我写的SSIS包将遵循这一点。我使用merge joinandConditional Split命令来选择相同的数据。

之后,我使用OLE DBCommand 删除 TableA的数据(只需使用"Delete RE_FormTo Where ID=?"SQLCommand 删除)。它可以工作,但它太慢了!删除重复数据大约需要一个小时!有谁知道这样做更有效的方法?

SSIS 包链接

4

2 回答 2

2

由于糟糕的 SSIS 包设计,执行势必会很慢。请参考文档SSIS 设计的最佳实践

让我向您解释一下您的包裹中存在的错误。

1.您正在使用阻塞转换(排序组件)。这些转换不会重用输入缓冲区,而是为输出创建一个新的缓冲区,并且大多数情况下它们比尝试重用的同步组件(例如查找、派生列等)慢输入缓冲区。根据 MSDN

Do not sort within Integration Services unless it is absolutely necessary. In 
order to perform a sort, Integration Services allocates the memory space of the
entire data set that needs to be transformed. If possible, presort the data before
it goes into the pipeline. If you must sort data, try your best to sort only small
data sets in the pipeline. Instead of using Integration Services for sorting, use 
an SQL statement with ORDER BY to sort large data sets in the database – mark 
the  output as sorted by changing the Integration Services pipeline metadata
on the data
source.

2.Merge Joinsemi-blocking transformation确实会影响性能,但远低于Blocking transformation

有两种方法可以解决问题

  1. 使用查找

在此处输入图像描述

  1. 使用执行 SQL 任务并编写合并 SQL

     DECLARE @T TABLE(ID INT);
     Merge @TableA as target
     using @TableB as source
     on target.ID=source.ID
     when matched then 
     Delete OUTPUT source.ID INTO @T;
    
     DELETE @TableA
     WHERE ID in (SELECT ID
                 FROM @T);
    
于 2013-01-10T06:52:46.820 回答
0

加入两个表后,只需插入Sort元素,他就会删除重复项...... http://sqlblog.com/blogs/jamie_thomson/archive/2009/11/12/sort-transform-arbitration-ssis.aspx

于 2013-01-10T06:55:12.430 回答