web-dev-qa-db-ja.com

BULKデータロードのSSISパッケージ

私は週末に、基本的に次のことを行う顧客のC#プログラムを分析しました。

  1. テーブルを切り捨て
  2. データのフェッチ(これらのソースは、ジョブが実行されるリモートデータベースまたはローカルデータベースです)
  3. SQLBulkCopy(.NETクラス、ジョブが実行されるデータベースの宛先テーブルへ)

ほとんどの場合、(1)と(2)はストアドプロシージャコールによって行われます。 SSISは、このプロセスの処理においてより効率的になると思います。私の最終結果は、SSISがより良い仕事をすることができるかどうかを決定し、次にパッケージを設計する最も効率的な方法です。

質問
レコードが多数ある場合、(2)と(3)が同じインスタンス上の同じデータベースであるときに、BULK INSERTタスクを使用するとSSISのパフォーマンスが向上しますか?または、(2)のプロシージャコールをINSERT INTOに変更して、(3)の必要性を排除しますか?

(2)がリモートソース(同じネットワーク上の別のSQLインスタンス)である場合、SSISはリモートソースからのデータのプルを.NET SQLClient経由で行うよりも効率的に処理しますか?大きな違いはないと思います。

また、(2)がリモートソースであり、かなり大量のデータ(800万以上)である場合、リモートインスタンス上のパッケージにデータをエクスポートさせることをお勧めします。次に、そのファイルを移行先サーバーに移動して、一括読み込みしますか?

6
user507

800万行の場合、SSISとSQLBulkCopyクラスの間に大きな違いはないと思います。 SSISでは、OLE DB Destinationで高速ロードオプションを使用していることを確認する必要があります。それ以外の場合は確実に遅くなります。ソースがローカルの場合、SQL Serverを試すことができます。宛先、それはOLE DB宛先よりも少し速いかもしれません。

4
Koen Verbeeck