Бөлісу құралы:


План выполнения и выделение буферов

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

Перед выполнением задача потока данных проверяет свои компоненты и формирует план выполнения для каждой последовательности компонентов. В этом разделе предоставляются сведения о плане выполнения, рассматривается, как просмотреть план и как на основании плана выполнения выделяются входной и выходной буферы.

Основные сведения о плане выполнения

План выполнения содержит потоки источника и рабочие потоки. Каждый поток содержит списки действий, которые задают списки действий над выходными данными для потоков источника или списки действий над входными и выходными данными для рабочих потоков. Потоки источника в плане выполнения представляют компоненты источника в потоке данных и идентифицируются в плане выполнения как SourceThreadn, где n — это начинающееся с нуля число потоков источника.

Каждый поток источника создает буфер, устанавливает прослушивателя и вызывает метод PrimeOutput на компоненте источника. Здесь начинается выполнение и отсюда берутся данные, когда компонент источника начинает добавлять строки в выходные буферы, предоставляемые ему задачей потока данных. После начала работы потоков источника работа распределяется среди рабочих потоков.

Рабочий поток содержит списки действий как над входными, так и над выходными данными и идентифицируется в плане выполнения как WorkThreadn, где n — это начинающееся с нуля число рабочих потоков. Эти потоки содержат списки действий над выходными данными, если граф содержит компонент с асинхронными выходами.

Следующий образец плана выполнения представляет поток данных, который содержит компонент источника, подключенный к преобразованию с асинхронным выходом, подключенным к компоненту назначения. В этом примере 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. Свойство Mode буфера PipelineBuffer также идентифицирует каждый буфер как входной или выходной буфер.

Компоненты преобразования с асинхронными выходами получают существующий входной буфер от метода ProcessInput и получают новый выходной буфер от метода PrimeOutput. Компонент преобразования с асинхронными выходами является единственным типом компонентов потока данных, который получает и входной, и выходной буфера.

Поскольку буфер, предоставленный компоненту, скорее всего, содержит больше столбцов, чем имеет компонент в его коллекциях входных и выходных столбцов, разработчики компонентов могут вызывать метод FindColumnByLineageID, чтобы определить положение столбца в буфере по его идентификатору LineageID.