性能の違い
「単純な」データ フロー タスクおよび同等の SQL 実行タスクのパフォーマンスを引き起こす可能性のある要因は多数あります。
- ネットワーク遅延。同じサーバーとインスタンスで、テーブル b からテーブル a への挿入を実行しています。SQL 実行タスクでは、その作業はすべて同じマシンで実行されます。サーバー B でパッケージを実行して、サーバー A から 125 万行をクエリし、ネットワーク経由でサーバー B にストリーミングします。そのデータは、対応する INSERT 操作のためにサーバー A にストリーミングされます。ネットワークが貧弱で、データの幅が広く (特にバイナリ型)、または単にサーバー間の距離が離れている (サーバー A が米国にあり、サーバー B がインドにある) 場合、パフォーマンスが低下します。
- メモリ不足。パッケージがターゲット/ソース データベースと同じサーバー上で実行されると仮定すると、データ フロー タスクはメモリ内エンジンであるため、依然として低速になる可能性があります。つまり、ソースから宛先に流れるすべてのデータがメモリに格納されます。SSIS が取得できるメモリが多いほど、処理速度が速くなります。ただし、SQL Server 自体だけでなく、メモリの割り当てについても OS と戦う必要があります。SSIS は SQL Server Integration Services ですが、SQL Server データベースと同じメモリ空間では実行されません。サーバーに 10 GB のメモリが割り当てられていて、OS が 2 GB を使用し、SQL Server が 8 GB を要求している場合、SSIS が動作する余地はほとんどありません。SQL Server にメモリの一部を放棄するように要求することはできないため、OS はページ アウトする必要があり、データの細流が制限されたデータ パイプラインを通過します。
- お粗末な目的地。使用している SSIS のバージョンに応じて、OLE DB 変換先の既定のアクセス モードは "テーブルまたはビュー" でした。これは、低レベルのロックがテーブル ロックにエスカレートするのを防ぐのに適した設定です。ただし、これは行の挿入を苦しめることによって行になります (1.25M の一意の挿入ステートメントが送信されます)。
Execute SQL Task
s INSERT INTO のセットベースのアプローチとは対照的です。SSIS の最近のバージョンでは、デフォルトでアクセス方法が宛先の「高速」バージョンに設定されています。これは、セットベースの同等の機能と同様に動作し、パフォーマンスが向上します。
- OLE DB コマンド変換。OLE DB Destinationがあり、これをOLE DB Command Transformationと混同する人もいます。これらは、用途が異なる 2 つの非常に異なるコンポーネントです。前者は宛先であり、すべてのデータを消費します。それは非常に速く進むことができます。後者は常にRBAR です。それを通過する各行に対してシングルトン操作を実行します。
- デバッグ。BIDS/SSDT でパッケージを実行するとオーバーヘッドが発生します。そのパッケージの実行は、DTS Debugging Host でラップされます。これにより、パッケージの実行が「重要ではない」ほど遅くなる可能性があります。実行する SQL タスクについて、デバッガーができることはあまりありません。実行するかしないかです。データフロー、検査、監視などできるメモリがたくさんあるため、利用可能なメモリの量が減り(pt 2を参照)、実行中のさまざまなチェックのために速度が低下します。より正確な比較を行うには、常にコマンド ライン (dtexec.exe /file MyPackage.dtsx) からパッケージを実行するか、SQL Server エージェントからスケジュールします。
パッケージデザイン
Execute SQL Task
単なるsである SSIS パッケージには、本質的に問題はありません。クエリを実行することで問題が簡単に解決できる場合は、SSIS を完全に忘れて、適切なストアド プロシージャを作成し、SQL エージェントでスケジュールして完了します。
多分。このような「単純な」ケースでも SSIS を使用することで私が気に入っているのは、一貫した成果物を保証できることです。大したことではないように聞こえるかもしれませんが、メンテナンスの観点からは、すべてがこれらのソース管理されたSSISパッケージに含まれているデータをいじっています。タスク AC は「単純」であるため、SQL エージェント ジョブから呼び出されるストアド プロシージャであることを新しい人に覚えたり、トレーニングしたりする必要はありません。タスク DJ、または K はそれよりもさらに単純なので、データをロードするためにエージェント ジョブで「インライン」クエリを実行するだけで、残りのパッケージを取得できます。Service Broker と一部の Web サービスを除いて、それらもデータベースを更新します。年齢を重ねるほど、触れる場所が増えるほど、やり過ぎであっても一貫したソリューション提供へのアプローチに価値を見出すことができます。
パフォーマンスがすべてではありませんが、SSIS チームは SSIS を使用して ETL ベンチマークを設定したため、一部のデータを急いでプッシュする機能を確実に備えています。
この回答が長くなるにつれて、SSIS の利点とストレート TSQL に対するデータ フローがネイティブであり、そのまま使用できるため、そのままにしておきます。
私のお金でそれらを打ち負かすのは難しい.