Plan d'exécution et allocation de mémoire tampon
Avant l'exécution, la tâche de flux de données examine ses composants et génère un plan d'exécution pour chaque séquence de composants. Cette section fournit des détails sur le plan d'exécution et son mode d'affichage, ainsi que sur l'allocation de mémoires tampons d'entrée et de sortie en fonction du plan d'exécution.
Fonctionnement du plan d'exécution
Un plan d'exécution contient des threads sources et des threads de travail. Chaque thread contient des listes de travaux qui spécifient des listes de travaux de sortie pour les threads sources ou des listes de travaux d'entrée et de sortie pour les threads de travail. Les threads sources d'un plan d'exécution, qui représentent les composants sources du flux de données, sont identifiés dans le plan d'exécution par SourceThreadn, où n correspond au numéro de base zéro du thread source.
Chaque thread source crée une mémoire tampon, définit un écouteur et appelle la méthode PrimeOutput sur le composant source. C'est de cet emplacement que démarre l'exécution et que proviennent les données, pendant que le composant source commence à ajouter des lignes aux mémoires tampons de sortie que lui fournit la tâche de flux de données. Une fois que les threads sources sont exécutés, la charge de travail est répartie entre les threads de travail.
Un thread de travail, qui peut contenir des listes de travaux d'entrée et de sortie, est identifié dans le plan d'exécution par WorkThreadn, où n correspond au numéro de base zéro du thread de travail. Ces threads contiennent des listes de travaux de sortie lorsque le graphique contient un composant à sorties asynchrones.
L'exemple de plan d'exécution suivant représente un flux de données qui contient un composant source connecté à une transformation à sortie asynchrone connectée à un composant de destination. Dans cet exemple, WorkThread0 contient une liste des travaux de sortie car le composant de transformation possède une sortie asynchrone.
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
[!REMARQUE]
Le plan d'exécution est généré chaque fois qu'un package est exécuté. Il peut être capturé en ajoutant un module fournisseur d'informations au package, en activant la journalisation et en sélectionnant l'événement PipelineExecutionPlan.
Fonctionnement de l'allocation de mémoire tampon
En fonction du plan d'exécution, la tâche de flux de données crée des mémoires tampons qui contiennent les colonnes définies dans les sorties des composants de flux de données. La mémoire tampon est réutilisée tandis que les données transitent par la séquence de composants, jusqu'à ce qu'un composant à sorties asynchrones soit trouvé. Puis, une nouvelle mémoire tampon est créée, qui contient les colonnes de sortie de la sortie asynchrone et les colonnes de sortie des composants en aval.
Pendant l'exécution, les composants ont accès à la mémoire tampon dans le thread source ou de travail actuel. Il peut s'agir d'une mémoire tampon d'entrée, fournie par la méthode ProcessInput, ou d'une mémoire tampon de sortie, fournie par la méthode PrimeOutput. La propriété Mode de PipelineBuffer identifie également chaque mémoire tampon en tant que mémoire tampon d'entrée ou de sortie.
Les composants de transformation à sorties asynchrones reçoivent la mémoire tampon d'entrée existante via la méthode ProcessInput et la nouvelle mémoire tampon de sortie via la méthode PrimeOutput. Les composants de transformation à sorties asynchrones sont les seuls types de composants de flux de données qui reçoivent à la fois une mémoire tampon d'entrée et de sortie.
Comme la mémoire tampon fournie à un composant est susceptible de contenir un nombre de colonnes supérieur à celui que possède le composant dans ses collections de colonnes d'entrée et de sortie, les développeurs de composants peuvent appeler la méthode FindColumnByLineageID pour rechercher une colonne dans la mémoire tampon en spécifiant son LineageID.
|