4

私はSSISを初めて使用し、最初のSSISパッケージを作成しています。

私のパッケージでは、データフローに変換のいくつかの段階があり、各段階でスクリプトコンポーネントがレコード(ある種のカスタムログ)をADO.NETの宛先に挿入しています。

同じデータベース内の同じテーブルを指している複数のADO.NETDestinationコンポーネントを使用しています。

これが正しいアプローチなのか、それともUnionALLを使用してすべてのレコードを一度に挿入する必要があるのか​​疑問に思います。

どんな助けでもいただければ幸いです。

4

2 に答える 2

1

パフォーマンスの観点からは、SSIS で結果を一緒に UNION し、それらを 1 回のチャックでデータベースに挿入すると、非常にわずかなパフォーマンスの向上が得られます。これは、インスタンス/データベースへの接続を 1 つしか作成せず、いつになるかによって決まるためです。ダーティ ページがディスクに書き込まれる可能性はありますが、ヘッドがスピンドル上を移動する必要がある回数が少なくなることを保証するものではありません。

ここでもっと重要だと思うのは、カスタムログの目的は何ですか? ログがパッケージのどこまで進んでいるか、特定の段階で更新されたレコードの数などを記録している場合、次の理由により、最後にそれらをすべて挿入するときにパッケージ内の UNION を使用しないことを強くお勧めします。

パッケージが途中で失敗し、最初に問題を診断し、次に失敗の結果として破損したデータを修正するというシナリオを想像してみてください。最後にすべてのログ エントリを書き込んでいて、パッケージが完了していない場合、ログ エントリは書き込まれず、作業は非常に困難になります。

代わりに、同じ接続を保持するように ADO 接続マネージャーを設定します。このようにして、接続は常に開いたままになり、再接続する必要があるというオーバーヘッドがなくなります。

于 2012-09-26T06:45:09.270 に答える
0

ユニオンオールしてから一度に全部挿入する方がいいと思います。

それはあなたのssisを明確にし、より良いパフォーマンスを得るでしょう。(私が知っているように、SSISはデータベースリソースの代わりにサーバーリソースを使用しますよね?)

于 2012-09-26T04:08:11.383 に答える