出力 "Output0" (5) およびコンポーネント "Data Flow Task" (1) の "出力列 "A" (67) は、その後、データ フロー タスクで使用されません。この未使用の出力列を削除すると、データ フロー タスクのパフォーマンスが向上する可能性があります。 "
私の問題を解決してください
出力 "Output0" (5) およびコンポーネント "Data Flow Task" (1) の "出力列 "A" (67) は、その後、データ フロー タスクで使用されません。この未使用の出力列を削除すると、データ フロー タスクのパフォーマンスが向上する可能性があります。 "
私の問題を解決してください
これらの警告は、データ フローに使用されていない列があることを示しています。データ フローは、固定サイズのメモリの「バケット」を割り当て、ソースからのデータを格納し、ダウンストリーム コンポーネントがメモリ アドレスに直接アクセスして同期変換を実行できるようにすることで機能します。
メモリは有限のリソースです。SSIS が 1 GB の処理を検出し、1 行のデータに 4096 MB のコストがかかる場合、メモリ領域が不足する前にパイプラインに最大 256 行のデータを保持できます。これらの 256 行は、N バケットの行に分割されます。これは、データベースを操作するときにセット ベースの操作をできる限り実行したいためです。
なぜこれが重要なのですか?SSIS は、パイプラインに持ち込んだすべてのものを使用したかどうかを検出します。使用されていない場合は、メモリを浪費しています。1 つの行のコストが 4096 になる代わりに、未使用の列を除外することで、各行に必要なメモリ量を 1024 MB に削減し、必要なものだけを取得するだけでパイプラインに 1024 行を含めることができるようになりました。
どうやってそこに着くのですか?データ ソースで、テーブルを選択する代わりにクエリを記述します。代わりに使用しないでくださいSELECT * FROM myTable
。必要なすべての列を明示的に列挙してください。フラット ファイル ソースについても同様です。使用されない列のチェックを外します。行全体を読み込む必要があるため、ディスクのペナルティを支払うことになりますが、DF をヒットしてそのメモリを消費する必要はありません。どのルックアップでも同じ話 - 必要なデータのみをクエリします。
非同期コンポーネントは、パフォーマンスの悪口になっているため、最後に注意する必要があります。上記の計算は、新入生の微積分クラスによく似ています。計算を簡単にするために、牛を球体と仮定します。非同期コンポーネントを使用すると、コンポーネントの前後でメモリが分割されます。コンポーネントを通過する行の形状を根本的に変更して、下流のコンポーネントがその上のアドレス空間を再利用できないようにします。これにより、低速な操作である物理メモリ コピーが発生します。
私の最後のコメントは、パッケージが適切に機能し、許容できる時間枠で終了する場合です。他に何もすることがない限り、そのままにして次のタスクに進みます。これらは単なる警告であり、本格的なエラーに「成長」するべきではありません。