SSIS を使用して 2 つのデータベース間でデータを同期しています。私は過去に SSIS と DTS を使用したことがありますが、通常はこの性質のアプリケーションを作成します (私はコーダーであり、そのほうが簡単です)。
私のパッケージでは、約 15,000 行を返す SQL タスクを使用しています。これを Foreach コンテナーに接続し、その中で結果セットの列の値を変数に割り当て、それらの変数を別の SQL タスクに供給されるパラメーターにマップします。
私が抱えている問題はデバッグに関するものであり、ブレークポイントや実行時の値の評価などのより複雑なデバッグだけではありません。つまり、これをデバッグなしではなく実行すると、完了するまでに数時間かかるということです。最終的に Delphi でプロセスを書き直した結果、次のようになりました。
データのフル プッシュ:
15,000 行をプルし、各行の宛先テーブルを更新してから、11,000 行をプルし、各行の宛先テーブルを更新します。
デバッグ:
Delphi アプリ: 139 秒
SSIS: 4 時間 46 分
デバッグなし:
Delphi アプリ
: 132 秒 SSIS: 384 秒
データの更新:
これにより 3,000 行がプルされますが、更新は必要なく、宛先テーブルに対しても行われません。次に、11,000 行をプルしますが、ここでも更新は必要なく、宛先テーブルに対しても行われません。
デバッグ:
Delphi アプリ: 42
秒 SSIS: 1 時間 10 分
デバッグなし:
Delphi アプリ: 34 秒
SSIS: 205 秒
奇妙なことに、このデバッグに費やされる時間のほとんどは、Visual Studio の UI 要素を更新することだけに費やされているように感じます。進行状況タブを見ると、各反復 (合計数千回) ごとにノードがツリーに追加され、プロセスが進行するにつれて、これはますます遅くなります。Visual Studio が UI を更新するループに巻き込まれているように見えるため、通常、デバッグを停止しようとしてもうまくいきません。SQL Server のプロファイラーを確認すると、実際の作業は行われていません。マシンが重要かどうかはわかりませんが、仕事には十分すぎるはずです (クアッド コア、4 ギガの RAM、512 MB のビデオ カード)。
この種の行動は正常ですか?私が本業のコーダーであると述べたように、私はこの種のアプリを書くことに何の問題もありません (実際、SSIS でアプリケーションを「描画」するよりも、アプリケーションをコーディングするのにかかる時間ははるかに短くなりますが、私はSSIS でより多くの作業を行うとマージンが縮小すると考えてください)、しかし、SSIS や DTS のようなものが私のツールボックスに収まる場所を見つけようとしています。これまでのところ、それについて本当に私を感動させたものは何もありません。何らかの方法で SSIS を誤用または悪用している可能性がありますか?
どんな助けでも大歓迎です、事前に感謝します!