私は SSIS を初めて使用するので、データ ワークフローで挿入を実行する際にどちらがパフォーマンスを向上させるかを知りたいと思っていました。
どちらか一方を使用する利点はありますか?
私は SSIS を初めて使用するので、データ ワークフローで挿入を実行する際にどちらがパフォーマンスを向上させるかを知りたいと思っていました。
どちらか一方を使用する利点はありますか?
それらは同様に変換と呼ばれますが、用途は大きく異なります。宛先は、それがどのように聞こえるかです-それはデータフローの終点です。(エラーフローを超えて)OLEDB変換先の出力に何も接続できません。宛先には、セットベースの挿入を実行する機能があります(これは、良好なパフォーマンスのために非常に重要です)。また、シングルトン挿入を実行することもでき(データフローを流れる各行に対して挿入ステートメントを発行する)、宛先へのスループットが低下します。
その動作をOLEDBコマンドと比較してください。これは、データフローを流れる各行に対して必要なことを実行できるようにする変換コンポーネントです。これは、スイスアーミーナイフのSQL「実行者」です。INSERTステートメントとして使用できますが、最も一般的にはUPDATEの宛先と見なされます。小さなデータセットの場合、それは問題ありません。OLEDBコマンド変換を使用するためのコストはコストです。データセットを流れる行ごとにシングルトンステートメントを発行します。これは、トランザクションログ、保持されているトランザクション時間、プランキャッシュ、および私が考えられない他の多くの点でコストがかかるでしょう。これらの操作をバッチ処理するようにSQLServerに指示する方法はないため、行を苦しめることによってステートメント行を発行することになります(RBAR)。
SSISで更新を行う必要がある場合は、ステージングテーブルに更新を書き込み、データフローの完了後にセットベースの更新を実行することで、パフォーマンスプロファイルが大幅に向上します。Andy Leonardは、統合サービスへの階段シリーズでこのパターンについて説明している一連のすばらしい記事を掲載しています。
参照
OLE Destination は、挿入先テーブルへのデータの一括読み込みを可能にするため、挿入に適しています。
OLE DB コマンド (これは OLE コマンド タスクの意味だと思います) は、その操作を行ごとに実行するため、処理が大幅に遅くなります。ただし、OLE DB コマンドは更新と削除を処理できますが、OLE Destination は処理できません。