実行プランおよびバッファの割り当て
実行前に、データ フロー タスクはそのコンポーネントを確認し、コンポーネントの各処理手順に応じて、実行プランを生成します。このセクションでは、実行プラン、プランの表示方法、および実行プランに基づいて入力および出力バッファを割り当てる方法に関する詳細について説明します。
実行プランについて
実行プランには、ソース スレッドと作業スレッドが含まれています。各スレッドには作業一覧が含まれており、ソース スレッドには出力作業一覧が、作業スレッドには入力と出力の作業一覧が指定されています。実行プラン内のソース スレッドは、データ フロー内の変換元コンポーネントを表し、実行プラン内では SourceThreadn によって識別されます。ここで n は、0 から始まるソース スレッドの番号を示します。
各ソース スレッドはバッファを作成してリスナを設定し、変換元コンポーネントで PrimeOutput メソッドを呼び出します。ここで、実行が開始されてデータが生成され、データ フロー タスクによって用意された出力バッファに、変換元コンポーネントが行を追加し始めます。ソース スレッドが実行されると、作業スレッド間で作業の負荷が分散されます。
作業スレッドは、入力および出力の両方の作業一覧を含む場合があり、実行プラン内では WorkThreadn によって識別されます。ここで n は、0 から始まる作業スレッドの番号を示します。非同期出力型のコンポーネントがグラフに含まれている場合、このスレッドには出力作業一覧が含まれます。
次のサンプル実行プランは、変換元コンポーネントが非同期出力型の変換に連結され、その変換が変換先コンポーネントに連結されているデータ フローを示しています。この例では、変換コンポーネントに非同期出力が含まれているので、WorkThread0 には出力作業一覧が含まれます。
SourceThread0
Influences: 72 158
Output Work List
CreatePrimeBuffer of type 1 for output id 10
SetBufferListener: "WorkThread0" for input ID 73
CallPrimeOutput on component "OLE DB Source" (1)
End Output Work List
This thread drives 0 distributors
End SourceThread0
WorkThread0
Influences: 72 158
Input Work list, input ID 73
CallProcessInput on input ID 73 on component "Sort" (72) for view type 2
End Input Work list for input 73
Output Work List
CreatePrimeBuffer of type 3 for output id 74
SetBufferListener: "WorkThread1" for input ID 171with internal handoff
CallPrimeOutput on component "Sort" (72)
End Output Work List
This thread drives 0 distributors
End WorkThread0
WorkThread1
Influences: 158
Input Work list, input ID 171
CallProcessInput on input ID 171 on component "OLE DB Destination" (158) for view type 4
End Input Work list for input 171
Output Work List
End Output Work List
This thread drives 0 distributors
End WorkThread1
メモ : |
---|
実行プランはパッケージが実行されるたびに生成され、ログ プロバイダをパッケージに追加し、ログ記録を有効にして PipelineExecutionPlan イベントを選択することにより、実行プランをキャプチャできます。 |
バッファの割り当てについて
実行プランに基づき、データ フロー タスクは、データ フロー コンポーネントの出力で定義された列を格納するバッファを作成します。このバッファは、非同期出力型のコンポーネントを検出するまで、コンポーネントの処理手順を通じてデータ フロー内で再使用されます。次に、新しいバッファが作成され、非同期出力の出力列と下流コンポーネントの出力列が格納されます。
実行中、コンポーネントは現在のソース スレッドまたは作業スレッド内のバッファにアクセスできます。そのバッファは、ProcessInput メソッドによって提供される入力バッファか、または PrimeOutput メソッドによって提供される出力バッファのどちらかです。各バッファは、PipelineBuffer の Mode プロパティにより、入力バッファまたは出力バッファに識別されます。
非同期出力型の変換コンポーネントは、ProcessInput メソッドから既存の入力バッファを受け取り、PrimeOutput メソッドから新しい出力バッファを受け取ります。非同期出力型の変換コンポーネントは、入力バッファおよび出力バッファの両方を受け取る、唯一のデータ フロー コンポーネントです。
コンポーネントに提供されるバッファには、コンポーネントに含まれる入力または出力列コレクションに含まれない列が含まれる場合があるため、コンポーネントの開発者は、FindColumnByLineageID メソッドを呼び出し、そのバッファの LineageID を指定することによってバッファ内の列を探すことができます。