KB4538581 - PERBAIKAN: Masalah Inlining Skalar UDF SQL Server 2019

Gejala

User-Defined Baru (UFS) yang diterapkan dalam Transact-SQL dan yang mengembalikan nilai data tunggal dikenal sebagai T-SQL Scalar User-Defined Functions (UFS). 

Microsoft SQL Server 2019 memperkenalkan fitur Inlining Skalar UDF yang dapat meningkatkan kinerja kueri yang menjalankan UDF Skalar T-SQL, di mana eksekusi UDF adalah hambatan utama. T-SQL Skalar UDF Inlining secara otomatis mengubah UDF yang tak sebaris menjadi ekspresi relasional. 


Pembaruan kumulatif ini menyertakan beberapa perbaikan di seluruh area berikut untuk skenario di mana kueri yang menggunakan Inlining Skalar UDF mungkin mengembalikan kesalahan atau hasil yang tidak diharapkan:

  • Ketik kesalahan ketidakcocokan jika tipe pengembalian UDF adalah tipe sql_variant (ditambahkan dalam cu2 Microsoft SQL Server 2019)

  • Invokasi UDF sp_executesql eksekusi aborts (ditambahkan di Microsoft SQL Server 2019 CU2)

  • UDFs merujuk label tanpa perintah GOTO terkait mengembalikan hasil yang tidak benar (ditambahkan di Microsoft SQL Server CU2 2019)

  • Kondisi kehabisan memori dan kebocoran memori terjadi karena UFS skalar yang sangat besar (ditambahkan dalam Microsoft SQL Server 2019 CU2)

  • Variabel yang tidak dimulai yang digunakan dalam pernyataan kondisi (IF-ELSE) menyebabkan kesalahan (ditambahkan di Microsoft SQL Server 2019 CU2)

  • Kesalahan konversi eksplisit jika UDF memiliki SQL_VARIANT parameter (ditambahkan di Microsoft SQL Server CU7 2019)

  • Kesalahan yang dinaikkan ketika referensi fungsi skalar CHECKSUM (ditambahkan Microsoft SQL Server CU7 2019)

  • Invokasi UDF dengan ekspresi skalar jumlah tinggi dapat menghasilkan kesalahan penjadwal non-hasil (ditambahkan dalam CU7 Microsoft SQL Server 2019)

  • Kesalahan yang dinaikkan saat kueri referensi UDF menggunakan OPTION (RECOMPILE) (ditambahkan di Microsoft SQL Server 2019 CU7)

  • Kesalahan izin yang dinaikkan ketika tampilan menggunakan UFS bergaris bawah (ditambahkan Microsoft SQL Server CU9 2019)

  • Pelanggaran akses terjadi saat menggunakan dukungan XEvent query_tsql_scalar_udf_inlined (ditambahkan di Microsoft SQL Server CU9 2019) 

  • Perilaku tidak konsisten karena Inlining UDF Skalar tidak menghargai petunjuk kueri 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' (ditambahkan dalam cu9 Microsoft SQL Server 2019)

  • UNGKAP Inlining berisi agregasi yang bisa mengakibatkan kesalahan penjadwal yang tidak menghasilkan (ditambahkan dalam CU9 Microsoft SQL Server 2019) 

  • Kesalahan memori karena serangkaian operasi skalar pada variabel yang sama dalam blok bersyarat (ditambahkan dalam Microsoft SQL Server 2019 CU9)

  • Pelanggaran Akses dapat terjadi ketika objek menggunakan skalar UDF (UDF1) yang tidak dapat disingkusakan dengan skalar UDF (UDF2) yang dapat disingkuakan, yang digunakan sebagai parameter input setelah pemutakhiran ke CU9 (ditambahkan di Microsoft SQL Server 2019 CU11)

  • UFS inlining dapat mengakibatkan kesalahan dengan kode kesalahan 6846, 1011, dan 107 (ditambahkan di Microsoft SQL Server 2019 CU11)


Pembaruan kumulatif ini juga memblokir inlining dalam skenario berikut ini:

  • Jika UDF merujuk fungsi intrinsic tertentu (misalnya, @@ROWCOUNT) yang mungkin mengubah hasil ketika diinlin (ditambahkan di Microsoft SQL Server 2019 CU2)

  • Saat fungsi agregat disampaikan sebagai parameter ke UDF skalar (ditambahkan di Microsoft SQL Server CU2)

  • Jika UDF merujuk tampilan bawaan (misalnya: OBJECT_ID) (ditambahkan di Microsoft SQL Server CU2 2019)

  • Jika UDF menggunakan metode XML (ditambahkan di Microsoft SQL Server 2019 CU4)

  • Jika UDF berisi SELECT dengan ORDER BY tanpa "TOP 1" (ditambahkan di Microsoft SQL Server 2019 CU4)

  • Jika kueri SELECT melakukan tugas bersama klausul ORDER BY (misalnya, SELECT @x = @x +1 FROM tabel ORDER BY column_name) (ditambahkan dalam Microsoft SQL Server 2019 CU4)

  • Jika UDF berisi beberapa pernyataan RETURN (ditambahkan di Microsoft SQL Server 2019 CU5)

  • Jika UDF dipanggil dari pernyataan RETURN (ditambahkan di Microsoft SQL Server CU5)

  • Jika UDF merujuk fungsi STRING_AGG (ditambahkan di Microsoft SQL Server CU5)

  • Jika definisi UDF merujuk tabel jarak jauh (ditambahkan di Microsoft SQL Server 2019 CU6)

  • Jika kueri panggilan UDF menggunakan GROUPING SETS, CUBE, atau ROLLUP (ditambahkan di Microsoft SQL Server 2019 CU6)

  • Jika kueri panggilan UDF berisi variabel yang digunakan sebagai parameter UDF untuk penetapan (misalnya, SELECT @y=2, @x=UDF(@y)) (ditambahkan di Microsoft SQL Server 2019 CU6)

  • Jika UDF merujuk kolom terenkripsi (ditambahkan di Microsoft SQL Server 2019 CU11)

  • Jika UDF berisi referensi ke 'WITH XMLNAMESPACES' (ditambahkan di Microsoft SQL Server 2019 CU11)

  • Jika kueri menjalankan UDF memiliki Common Table Expressions (CTEs) (ditambahkan di Microsoft SQL Server 2019 CU11)


After you upgrade to Microsoft SQL Server 2019 CU2 but before you upgrade to CU5, you should re-evaluate whether a UDF is eligible for inlining. Untuk melakukan ini, refresh UFS skalar yang memenuhi syarat melalui salah satu metode berikut ini:

Skrip berikut ini menghasilkan skrip untuk merefresh metadata untuk skalar inlin yang sudah ada UFS:

/*

Menghasilkan skrip yang dapat digunakan untuk merefresh semua Skalar UFS yang tidak dapat sebaris.

Catatan Perintah sp_refreshsqlmodule tidak mempengaruhi izin apa pun, properti yang diperluas,

atau SET yang terkait dengan objek.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

DARI sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Note Setelah memutakhirkan ke Microsoft SQL Server CU5 2019, kami akan secara otomatis membuat agar UDF dapat membuat inlineabilitas selama kompilasi lagi.

Pemecahan Masalah

Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut ini untuk SQL Server:

Setiap pembaruan kumulatif baru untuk SQL Server hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk semua SQL Server:

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".

Referensi

Pelajari tentang terminologi yang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×