KB4538581 – oprava: Scalar UDF Inlining issues inlining in SQL Server 2019

Příznaky

User-Defined funkce (UDF), které jsou implementovány v Transact-SQL a které vracejí jednu datovou hodnotu, se označuje jako T-SQL Scalar User-Defined Functions (UDF). 

Microsoft SQL Server 2019 představila funkci inliningu Scalar UDF, která může zlepšit výkon dotazů, které vyvolané skalárními soubory UDF T-SQL, ve kterých je hlavním úzkým místem spuštění UDF. Funkce T-SQL Scalar UDF Inlining automaticky transformuje vložené UDF na relační výrazy. 


Tato kumulativní aktualizace obsahuje několik oprav v následujících oblastech scénářů, ve kterých dotaz, který používá inlining Scalar UDF, může vrátit chybu nebo neočekávané výsledky:

  • Chyba neshody typů, pokud je návratový typ UDF sql_variant (přidaná v Microsoft SQL Server 2019 CU2)

  • UDF invocation from sp_executesql aborts execution (added in Microsoft SQL Server 2019 CU2)

  • UDF odkazující na popisky bez přidruženého příkazu GOTO vracejí nesprávné výsledky (přidané Microsoft SQL Server 2019 CU2)

  • Kvůli velmi velkým skalárním souborům UDF (přidané v Microsoft SQL Server 2019 CU2) dochází k nevracení paměti

  • Neinicializované proměnné použité v příkazůch condition (IF-ELSE) způsobují chyby (přidané Microsoft SQL Server 2019 CU2)

  • Chyba explicitního převodu, pokud UDF SQL_VARIANT parametr (přidaný v Microsoft SQL Server 2019 CU7)

  • Chyba vyvolaná při odkazování na skalární funkci CHECKSUM (přidaná Microsoft SQL Server 2019 CU7)

  • Vyvolání UDF s vysokým počtem skalárních výrazů přehodnocení může vést k chybě plánovače bez výnosu (přidaná v Microsoft SQL Server 2019 CU7)

  • Při použití funkce OPTION (RECOMPILE) (přidané v Microsoft SQL Server 2019 CU7) došlo k chybě

  • Chyby oprávnění vyvolané v případě, že zobrazení vyvolá inlined UDFs (přidané v Microsoft SQL Server 2019 CU9)

  • Porušení přístupu, ke kterým dochází při použití query_tsql_scalar_udf_inlined XEvent (přidané v Microsoft SQL Server 2019 CU9) 

  • Nekonzistentní chování způsobené inlinem Scalar UDF, které není v QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n dotazu (přidané v Microsoft SQL Server 2019 CU9)

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

  • Nedostatky paměti způsobené posloupností skalárních operací na stejné proměnné v podmíněných blocích (přidané v Microsoft SQL Server 2019 CU9)

  • K narušení přístupu může dojít, když objekt vyvolá skalární inlineable UDF (UDF1) se skalárním nelineovatelným UDF (UDF2), který se používá jako vstupní parametr po upgradu na CU9 (přidaný v Microsoft SQL Server 2019 CU11).

  • Při inlineování souborů UDF může dojít k chybě s následujícími kódy chyb 6846, 1011 a 107 (přidané v Microsoft SQL Server 2019 CU11)


Tato kumulativní aktualizace také blokuje inlining v následujících situacích:

  • Pokud UDF odkazuje na některé vnitřní funkce (například @@ROWCOUNT), které mohou změnit výsledky při inlined (přidané v Microsoft SQL Server 2019 CU2)

  • Když se agregační funkce předá jako parametry skalárního UDF (přidané v Microsoft SQL Server 2019 CU2)

  • Pokud UDF odkazuje na předdefinová zobrazení (například: OBJECT_ID) (přidané v Microsoft SQL Server 2019 CU2)

  • Pokud UDF používá metody XML (přidané v Microsoft SQL Server 2019 CU4)

  • Pokud UDF obsahuje select s ORDER BY bez "TOP 1" (přidané v Microsoft SQL Server 2019 CU4)

  • Pokud dotaz SELECT provádí přiřazení společně s klauzulí ORDER BY (například SELECT @x = @x +1 FROM tabulka ORDER BY column_name) (přidaná v Microsoft SQL Server 2019 CU4)

  • Pokud UDF obsahuje více příkazů RETURN (přidaných Microsoft SQL Server 2019 CU5)

  • Pokud je příkaz UDF volán z příkazu RETURN (přidaný v Microsoft SQL Server 2019 CU5)

  • Pokud UDF odkazuje na funkci STRING_AGG (přidaná v Microsoft SQL Server 2019 CU5)

  • Pokud definice UDF odkazuje na vzdálené tabulky (přidané Microsoft SQL Server 2019 CU6)

  • Pokud dotaz pro volání UDF používá sady seskupení, datová krychle nebo ROLLUP (přidané v Microsoft SQL Server 2019 CU6)

  • Pokud dotaz volající pomocí UDF obsahuje proměnnou, která se používá jako parametr UDF pro přiřazení (například SELECT @y=2, @x=UDF(@y)) (přidaná v Microsoft SQL Server 2019 CU6)

  • Pokud UDF odkazuje na zašifrované sloupce (přidané Microsoft SQL Server 2019 CU11)

  • Pokud UDF obsahuje odkazy na WITH XMLNAMESPACES (přidané v Microsoft SQL Server 2019 CU11)

  • Pokud má dotaz vyvolání UDF společné výrazy tabulky (CTEs) (přidané v Microsoft SQL Server 2019 CU11)


Po upgradu na Microsoft SQL Server 2019 CU2, ale před upgradem na CU5 byste měli znovu vyhodnotit, jestli má UDF nárok na inlining. Provedete to tak, že provedete aktualizaci oprávněných skalárních souborů UDF některou z následujících metod:

Následující skript vygeneruje skript, který aktualizuje metadata pro existující skalární soubory UDF:

/*

Vygeneruje skript, který se používá k aktualizaci všech aktivních inlineable Scalar UDFs.

PoznámkaPříkaz sp_refreshsqlmodule nemá vliv na žádná oprávnění, rozšířené vlastnosti,

nebo SET, které jsou přidružené k objektu.

*/

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;

PŘEJÍT

Poznámka Po upgradu na Microsoft SQL Server 2019 CU5 automaticky odvodíme inlineability UDF během kompilace znovu.

Řešení

Tento problém je opravený v následující kumulativní aktualizaci pro SQL Server:

Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace pro SQL Server:

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Odkazy

Přečtěte si o terminologii, kterou Microsoft používá k popisu aktualizací softwaru.

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Děkujeme za váš názor!

Děkujeme vám za váš názor! Pravděpodobně bude užitečné, když vás spojíme s některým z našich agentů podpory Office.

×