Compartir a través de


Plan de ejecución y asignación de búfer

Se aplica a: SQL Server SSIS Integration Runtime en Azure Data Factory

Antes de la ejecución, la tarea de flujo de datos examina sus componentes y genera un plan de ejecución para cada secuencia de componentes. En esta sección se proporcionan detalles sobre el plan de ejecución, cómo ver el plan y cómo se asignan búferes de entrada y salida en función del plan de ejecución.

Descripción del plan de ejecución

Un plan de ejecución contiene subprocesos de origen y de trabajo; cada subproceso contiene listas de trabajo que especifican listas de trabajo de salida para los subprocesos de origen o listas de trabajo de entrada y salida para los subprocesos de trabajo. Los subprocesos de origen de un plan de ejecución representan los componentes de origen del flujo de datos y se identifican en el plan de ejecución mediante SourceThreadn, donde n es el número de base cero del subproceso de origen.

Cada subproceso de origen crea un búfer, establece un agente de escucha y llama al método PrimeOutput en el componente de origen. Aquí es donde se inicia la ejecución y se original los datos, a medida que el componente de origen comienza a agregar filas a los búferes de salida que le proporciona la tarea de flujo de datos. Una vez que los subprocesos de origen se están ejecutando, el equilibrio de trabajo se distribuye entre subprocesos de trabajo.

Un subproceso de trabajo puede contener listas de trabajo de entrada y salida, y se identifica en el plan de ejecución como WorkThreadn, donde n es el número de base cero del subproceso de trabajo. Estos subproceso contienen listas de trabajo de salida cuando el gráfico contiene un componente con salidas asincrónicas.

El plan de ejecución de ejemplo siguiente representa un flujo de datos que contiene un componente de origen conectado a una transformación con una salida asincrónica conectada a un componente de destino. En este ejemplo, WorkThread0 contiene una lista de trabajo de salida porque el componente de transformación tiene una salida asincrónica.

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

El plan de ejecución se genera cada vez que se ejecuta un paquete y se puede capturar agregando un proveedor de registro al paquete, habilitando el registro y seleccionando el evento PipelineExecutionPlan.

Descripción de la asignación de búferes

La tarea de flujo de datos, basándose en el plan de ejecución, crea búferes que contienen las columnas definidas en las salidas de los componentes de flujo de datos. El búfer se reutiliza a media que los datos fluyen a través de la secuencia de componentes, hasta que se encuentra un componente con salidas asincrónicas. Entonces, se crea un nuevo búfer que contiene las columnas de salida de la salida asincrónica y las columnas de salida de componentes de nivel inferior.

Durante la ejecución, los componentes tienen acceso al búfer en el subproceso de origen o trabajo actual. El búfer es un búfer de entrada, que proporciona el método ProcessInput, o un búfer de salida, que proporciona el método PrimeOutput. La propiedad Mode de PipelineBuffer también identifica cada búfer como búfer de entrada o salida.

Los componentes de transformación con salidas asincrónicas reciben el búfer de entrada existente del método ProcessInput y reciben el nuevo búfer de salida del método PrimeOutput. Un componente de transformación con salidas asincrónicas es el único tipo de componente de flujo de datos que recibe un búfer de entrada y un búfer de salida.

Dado que es probable que el búfer que se proporciona a un componente contenga más columnas de las que el componente incluye en sus colecciones de columnas de entrada o salida, los desarrolladores de componentes pueden llamar al método FindColumnByLineageID para localizar una columna en el búfer mediante la especificación de su valor LineageID.