2

パッケージの作成に問題がありSSISます。誰か助けてもらえますか?
ケースは次のとおりです。2つのテーブル:ABがあり、構造は同じです。ただし、それらは異なるサーバーに保存されます。

からにSSISデータを転送するためのパッケージをすでに作成しました(一度に約100万行、1〜2分かかります)。AB

その後、にA転送された後、テーブルのデータを削除したいと思いますB。私が書いたSSISパッケージはそれに続くでしょう。merge joinandConditional Splitコマンドを使用して同じデータを選択します。

その後、OLE DBコマンドを使用してテーブルAのデータを削除します("Delete RE_FormTo Where ID=?"SQLCommandを使用して削除するだけです)。それは動作しますが、遅すぎます!重複データを削除するのに約1時間かかりました!誰かがこれを行うためのより効率的な方法を知っていますか?

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.マージ結合はsemi-blocking transformation、パフォーマンスを低下させますが、Blocking transformation

問題を解決する方法は2つあります

  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 に答える