Telah didokumentasikan dengan cukup baik bahwa UDF memaksakan rencana serial secara keseluruhan.
Saya tidak yakin semuanya terdokumentasi dengan baik.
- Fungsi T-SQL skalar mencegah paralelisme di mana saja dalam rencana.
- Fungsi CLR skalar dapat dieksekusi secara paralel, asalkan tidak mengakses database.
- Fungsi T-SQL bernilai multi-pernyataan tabel memaksa zona serial dalam rencana yang mungkin menggunakan paralelisme di tempat lain.
- Fungsi T-SQL bernilai tabel inline diperluas seperti tampilan, jadi tidak memiliki efek langsung.
Lihat Memaksa Rencana Eksekusi Paralel dan / atau presentasi Eksekusi Paralel Craig Freedman .
Ada klaim tentang UDF sebagai kotak hitam harus menggunakan kursor.
Klaim ini tidak benar.
Poin ekstra untuk menjelaskan mengapa mesin memaksa keseluruhan rencana menjadi serial, bukan hanya tahap perhitungan UDF.
Pemahaman saya adalah bahwa pembatasan saat ini adalah murni hasil dari detail implementasi tertentu. Tidak ada alasan mendasar mengapa fungsi tidak dapat dieksekusi menggunakan paralelisme.
Secara khusus, fungsi skalar T-SQL dijalankan di dalam konteks T-SQL yang terpisah, yang memperumit operasi, koordinasi, dan shutdown yang benar (terutama dalam kasus kesalahan) secara signifikan.
Sama halnya, variabel tabel mendukung pembacaan paralel (tetapi tidak menulis) secara umum, tetapi variabel tabel yang diekspos oleh fungsi bernilai tabel tidak dapat mendukung pembacaan paralel karena alasan implementasi spesifik. Anda akan membutuhkan seseorang dengan akses kode sumber (dan kebebasan untuk berbagi detail) untuk memberikan jawaban yang berwibawa, saya khawatir.
Apakah dukungan untuk UDF paralel merupakan fitur yang wajar untuk diminta?
Tentu saja, jika Anda dapat membuat kasus yang cukup kuat. Perasaan saya sendiri adalah bahwa pekerjaan yang terlibat akan luas, sehingga proposal Anda harus memenuhi standar yang sangat tinggi. Misalnya, permintaan terkait (dan lebih sederhana) untuk menyediakan fungsi skalar sebaris memiliki dukungan besar, tetapi telah mendekam tidak diterapkan selama bertahun-tahun sekarang.
Anda mungkin ingin membaca makalah Microsoft:
... yang menguraikan pendekatan yang akan diambil Microsoft untuk mengatasi masalah kinerja fungsi skalar T-SQL dalam rilis setelah SQL Server 2017.
Tujuan dari Froid adalah untuk memungkinkan pengembang untuk menggunakan abstraksi UDF dan prosedur tanpa mengurangi kinerja. Froid mencapai tujuan ini menggunakan teknik baru untuk secara otomatis mengkonversi program imperatif menjadi bentuk aljabar relasional yang setara bila memungkinkan. Froid memodelkan blok kode imperatif sebagai ekspresi relasional, dan secara sistematis menggabungkannya menjadi satu ekspresi menggunakan operator Terapkan, sehingga memungkinkan pengoptimal kueri untuk memilih rencana kueri paralel yang efisien dan berorientasi pada set .
(penekanan milikku)
Fungsi T-SQL skalar sebaris sekarang diimplementasikan dalam SQL Server 2019 .