Salt la conținutul principal
Asistență
Conectare

KB4538581 - REMEDIERE: Probleme scalare UDF Inlining în SQL Server 2019

Simptome

User-Defined (UDF) implementate în Transact-SQL și care returnează o valoare de date unică se cunoscute sub numele de funcții scalare User-Defined T-SQL (UDF). 

Microsoft SQL Server 2019 a introdus caracteristica Scalar UDF Inlining care poate îmbunătăți performanța interogărilor care apelează UDF-uri scalare T-SQL, în care executarea UDF este principala problemă. T-SQL Scalar UDF Inlining transformă automat UDF-urile inlineable în expresii relaționale. 


Această actualizare cumulativă include câteva remedieri în următoarele zone pentru scenariile în care o interogare care utilizează scalar UDF Inlining poate returna o eroare sau rezultate neașteptate:

  • Eroare de nepotrivire tip dacă tipul de returnare al UDF este un sql_variant (adăugat în Microsoft SQL Server 2019 CU2)

  • Invocarea UDF sp_executesql executarea abandonată (adăugată în cu2 Microsoft SQL Server 2019)

  • UdFs referencing labels without an associated GOTO command return incorrect results (added in Microsoft SQL Server 2019 CU2)

  • Condițiile de memorie insuficientă și scurgerile de memorie apar din cauza UDF-urilor scalare foarte mari (adăugate la data de Microsoft SQL Server 2019 CU2)

  • Variabilele nenițializate utilizate în declarațiile condiție (IF-ELSE) provoacă erori (adăugate în cu2 Microsoft SQL Server 2019)

  • Eroare de conversie explicită dacă UDF SQL_VARIANT parametru (adăugat la Microsoft SQL Server 2019 CU7)

  • Eroare ridicată atunci când referințele funcției scalare CHECKSUM (adăugat în Microsoft SQL Server 2019 CU7)

  • Invocarea UDF cu un număr mare de expresii scalare re-evaluări poate avea ca rezultat o eroare programator care nu dă rezultate (adăugată în cu7 Microsoft SQL Server 2019)

  • Eroare ridicată atunci când interogarea de referire UDF utilizează OPTION (RECOMPILE) (adăugată în Microsoft SQL Server 2019 CU7)

  • Erori de permisiune ridicate atunci când vizualizările apelează UDF-uri subliniate (adăugate în Microsoft SQL Server 2019 CU9)

  • Încălcări de acces care apar atunci când utilizați XEvent query_tsql_scalar_udf_inlined (adăugat în Microsoft SQL Server 2019 CU9) 

  • Comportament inconsistent, datorită faptului că Scalar UDF Inlining nu respectă indiciul de interogare "QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n" (adăugat în Microsoft SQL Server 2019 CU9)

  • Inlining UDF contain aggregations that could result in non-yielding scheduler error (added in Microsoft SQL Server 2019 CU9) 

  • Memorie insuficientă din cauza unei secvențe de operațiuni scalare pe aceeași variabilă în blocuri condiționale (adăugate în cu9 Microsoft SQL Server 2019)

  • Încălcarea accesului poate apărea atunci când un obiect apelează un UDF (UDF1) inliner scalar inlineable UDF (UDF2) care este utilizat ca parametru de intrare după upgrade-ul la CU9 (adăugat în cu11 Microsoft SQL Server 2019)

  • UDF-urile deinse ar putea avea ca rezultat o eroare dacă urmați codurile de eroare 6846, 1011 și 107 (adăugate la Microsoft SQL Server 2019 CU11)


De asemenea, această actualizare cumulativă blocheazălinarea în următoarele scenarii:

  • Dacă UDF face referire la anumite funcțiiinsice (de exemplu, @@ROWCOUNT) care pot modifica rezultatele atunci când sunt subliniate (adăugate la cu2 Microsoft SQL Server 2019)

  • Când funcțiile agregate sunt transmise ca parametri unui UDF scalar (adăugat la Microsoft SQL Server 2019 CU2)

  • Dacă referințele UDF sunt vizualizări predefinite (de exemplu: OBJECT_ID) (adăugate în cu2 Microsoft SQL Server 2019)

  • Dacă UDF utilizează metode XML (adăugate la cu Microsoft SQL Server 2019 CU4)

  • Dacă UDF conține o valoare SELECT cu ORDER BY fără "TOP 1" (adăugată în Microsoft SQL Server 2019 CU4)

  • Dacă interogarea SELECT efectuează o atribuire împreună cu clauza ORDER BY (de exemplu, SELECT @x = @x +1 FROM tabel ORDER BY column_name) (adăugat la cu4 Microsoft SQL Server 2019)

  • Dacă UDF conține mai multe declarații RETURN (adăugate în cu5 Microsoft SQL Server 2019)

  • Dacă UDF este apelat dintr-o declarație RETURN (adăugată în cu5 Microsoft SQL Server 2019)

  • Dacă UDF face referire la funcția STRING_AGG (adăugată în cu5 Microsoft SQL Server 2019)

  • Dacă definiția UDF face referire la tabele la distanță (adăugate în Microsoft SQL Server 2019 CU6)

  • Dacă interogarea de apelare UDF utilizează GROUPING SETS, CUBE sau ROLLUP (adăugat la Microsoft SQL Server 2019 CU6)

  • Dacă interogarea de apelare UDF conține o variabilă care este utilizată ca parametru UDF pentru atribuire (de exemplu, SELECT @y=2, @x=UDF(@y)) (adăugat în cu6 Microsoft SQL Server 2019)

  • Dacă UDF face referire la coloane criptate (adăugate la Microsoft SQL Server 2019 CU11)

  • Dacă UDF conține referințe la "WITH XMLNAMESPACES" (adăugat la Microsoft SQL Server 2019 CU11)

  • Dacă interogarea care invoca UDF are expresii de tabel comune (CTE) (adăugate la Microsoft SQL Server 2019 CU11)


După ce faceți upgrade la CU2 Microsoft SQL Server 2019, dar înainte să faceți upgrade la CU5, trebuie să evaluați din nou dacă un UDF este eligibil pentru inlinare. Pentru a face acest lucru, reîmprospătați udf-urile scalare eligibile prin oricare dintre următoarele metode:

Următorul script generează un script pentru reîmprospătarea metadatelor pentru UDF-urile scalare existente:

/*

Generează un script care se poate utiliza pentru a reîmprospăta toate UDF-urile scalare active inlineable.

Notă Comanda sp_refreshsqlmodule nu afectează permisiunile, proprietățile extinse,

sau setați opțiunile care sunt asociate cu obiectul.

*/

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

+ ']'';' AS "RefreshStatement"

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Notă După ce faceți upgrade la CU5 Microsoft SQL Server 2019, vom deduce automat inability udf în timpul compilării din nou.

Rezolvare

Această problemă este remediată în următoarea actualizare cumulativă pentru SQL Server:

Fiecare actualizare cumulativă nouă SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Referințe

Aflați despre terminologia utilizată de Microsoft pentru a descrie actualizările de software.

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

V-a fost de ajutor această informație?

Vă mulțumim pentru feedback!

×