Bagikan melalui


Rencana Eksekusi dan Alokasi Buffer

Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory

Sebelum eksekusi, tugas aliran data memeriksa komponennya dan menghasilkan rencana eksekusi untuk setiap urutan komponen. Bagian ini menyediakan detail tentang rencana eksekusi, cara melihat rencana, dan bagaimana buffer input dan output dialokasikan berdasarkan rencana eksekusi.

Memahami Rencana Eksekusi

Rencana eksekusi berisi utas sumber dan alur kerja, dan setiap utas berisi daftar kerja yang menentukan daftar kerja output untuk utas sumber atau daftar kerja input dan output untuk utas kerja. Utas sumber dalam rencana eksekusi mewakili komponen sumber dalam aliran data dan diidentifikasi dalam rencana eksekusi oleh SourceThreadn, di mana n adalah jumlah berbasis nol dari utas sumber.

Setiap utas sumber membuat buffer, mengatur pendengar, dan memanggil PrimeOutput metode pada komponen sumber. Di sinilah eksekusi dimulai dan data berasal, karena komponen sumber mulai menambahkan baris ke buffer output yang disediakan oleh tugas aliran data. Setelah utas sumber berjalan, keseimbangan pekerjaan didistribusikan di antara utas kerja.

Alur kerja mungkin berisi daftar kerja input dan output dan diidentifikasi dalam rencana eksekusi sebagai WorkThreadn, di mana n adalah nomor berbasis nol dari utas kerja. Utas ini berisi daftar kerja output saat grafik berisi komponen dengan output asinkron.

Contoh rencana eksekusi berikut mewakili aliran data yang berisi komponen sumber yang terhubung ke transformasi dengan output asinkron yang terhubung ke komponen tujuan. Dalam contoh ini, WorkThread0 berisi daftar kerja output karena komponen transformasi memiliki output asinkron.

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  

Catatan

Rencana eksekusi dihasilkan setiap kali paket dijalankan, dan dapat diambil dengan menambahkan penyedia log ke paket, mengaktifkan pengelogan, dan memilih peristiwa PipelineExecutionPlan .

Memahami Alokasi Buffer

Berdasarkan rencana eksekusi, tugas aliran data membuat buffer yang berisi kolom yang ditentukan dalam output komponen aliran data. Buffer digunakan kembali saat data mengalir melalui urutan komponen, sampai komponen dengan output asinkron ditemui. Kemudian, buffer baru dibuat, yang berisi kolom output output asinkron dan kolom output komponen hilir.

Selama eksekusi, komponen memiliki akses ke buffer di sumber atau utas kerja saat ini. Buffer adalah buffer input, yang disediakan oleh ProcessInput metode , atau buffer output, yang disediakan oleh PrimeOutput metode . Properti Mode juga PipelineBuffer mengidentifikasi setiap buffer sebagai buffer input atau output.

Komponen transformasi dengan output asinkron menerima buffer input yang ada dari ProcessInput metode , dan menerima buffer output baru dari PrimeOutput metode . Komponen transformasi dengan output asinkron adalah satu-satunya jenis komponen aliran data yang menerima buffer input dan output.

Karena buffer yang disediakan untuk komponen kemungkinan berisi lebih banyak kolom daripada yang dimiliki komponen dalam koleksi kolom input atau outputnya, pengembang komponen dapat memanggil FindColumnByLineageID metode untuk menemukan kolom di buffer dengan menentukan LineageID-nya.