Piano di esecuzione e allocazione di buffer

Prima dell'esecuzione, l'attività Flusso di dati esamina i propri componenti e genera un piano di esecuzione per ogni sequenza di componenti. In questa sezione vengono fornite informazioni sul piano di esecuzione, su come visualizzarlo e su come influisce sull'allocazione dei buffer di input e output.

Informazioni sul piano di esecuzione

Un piano di esecuzione contiene thread di origine e thread di lavoro. Ogni thread contiene elenchi di operazioni che specificano elenchi di operazioni di output per i thread di origine oppure elenchi di operazioni di input e output per i thread di lavoro. I thread di origine in un piano di esecuzione rappresentano i componenti di origine nel flusso di dati e sono identificati da SourceThreadn, dove n è il numero in base zero del thread di origine.

Ogni thread di origine crea un buffer, imposta un listener e chiama il metodo PrimeOutput sul componente di origine. Si tratta del punto in cui viene avviata l'esecuzione e hanno origine i dati, quando il componente di origine inizia ad aggiungere righe nei buffer di output forniti dall'attività Flusso di dati. Dopo l'inizio dell'esecuzione dei thread di origine, il lavoro viene bilanciato tra thread di lavoro.

Un thread di lavoro può contenere sia elenchi di operazioni di input che di output ed è identificato nel piano di esecuzione come WorkThreadn, n è il numero in base zero del thread di lavoro. Questi thread contengono elenchi di operazioni di output quando il grafico contiene un componente con output asincroni.

Nel piano di esecuzione di esempio seguente viene rappresentato un flusso di dati che contiene un componente di origine connesso a una trasformazione con un output asincrono connesso a un componente di destinazione. Nell'esempio WorkThread0 contiene un elenco di operazioni di output perché il componente di trasformazione ha un output asincrono.

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

[!NOTA]

Il piano di esecuzione viene generato ogni volta che un pacchetto viene eseguito e può essere acquisito con l'aggiunta di un provider di log al pacchetto, l'abilitazione della registrazione e la selezione dell'evento PipelineExecutionPlan.

Informazioni sull'allocazione di buffer

In base al piano di esecuzione, l'attività Flusso di dati crea buffer che contengono le colonne definite negli output dei componenti del flusso di dati. Il buffer viene riutilizzato durante il flusso dei dati attraverso la sequenza dei componenti, finché non viene rilevato un componente con output asincroni. A questo punto viene creato un nuovo buffer, che contiene le colonne di output dell'output asincrono e le colonne di output dei componenti a valle.

Durante l'esecuzione, i componenti hanno accesso al buffer nell'origine o nel thread di lavoro corrente. Il buffer è un buffer di input, fornito dal metodo ProcessInput, o un buffer di output, fornito dal metodo PrimeOutput. Anche la proprietà Mode di PipelineBuffer identifica ogni buffer come buffer di input o di output.

I componenti di trasformazione con output asincroni ricevono il buffer di input esistente dal metodo ProcessInput e il nuovo buffer di output dal metodo PrimeOutput. Un componente di trasformazione con output asincroni è il solo tipo di componente del flusso di dati che riceve un buffer sia di input che di output.

Poiché il buffer fornito a un componente contiene probabilmente più colonne di quelle presenti nelle raccolte di colonne di output o di input del componente, gli sviluppatori di componenti possono chiamare il metodo FindColumnByLineageID per individuare una colonna nel buffer specificando LineageID.

Icona di Integration Services (piccola) Rimanere aggiornati con Integration Services

Per informazioni su download, articoli, esempi e video Microsoft più recenti, nonché sulle soluzioni selezionate dalla community, visitare la pagina Integration Services su MSDN:


Per ricevere notifica automatica su questi aggiornamenti, sottoscrivere i feed RSS disponibili nella pagina.