KB4538581 - CORRECTIF : Problèmes de détails de l’UDF Scalar dans SQL Server 2019

Symptômes

User-Defined de données (UDF) qui sont implémentées dans Transact-SQL et qui retournent une valeur de données unique sont appelées fonctions User-Defined scala commerciale T-SQL(UDF). 

Microsoft SQL Server 2019 a introduit la fonctionnalité Scalar UDF Inlining qui peut améliorer les performances des requêtes qui appellent les UDF T-SQL Scalar, dans lesquelles l’exécution UDF est le goulot d’étranglement principal. T-SQL Scalar UDF Inlining transforme automatiquement les UDF inlineables en expressions relationnelles. 


Cette mise à jour cumulative inclut plusieurs correctifs dans les zones suivantes pour les scénarios dans lesquels une requête qui utilise le modèle Scalar UDF Inlining peut renvoyer une erreur ou des résultats inattendus :

  • Erreur de type inser si le type de retour de la FDU est un sql_variant (ajouté dans Microsoft SQL Server 2019 CU2)

  • L’appel UDF sp_executesql annule l’exécution (ajouté dans Microsoft SQL Server 2019 CU2)

  • Les UDF font référence à des étiquettes sans commande DQP associée et renvoient des résultats incorrects (ajoutés Microsoft SQL Server 2019 CU2)

  • Les conditions de mémoire non mémoire et les fuites de mémoire se produisent en raison de très grands scala scalar UDFs (ajoutés dans Microsoft SQL Server 2019 CU2)

  • Les variables non débutées utilisées dans des instructions de condition (SI-SINON) entraînent des erreurs (ajoutées Microsoft SQL Server 2019 CU2)

  • Erreur de conversion explicite si le paramètre UDF SQL_VARIANT (ajouté dans Microsoft SQL Server 2019 CU7)

  • Erreur élevée lorsque la fonction scalar fait référence à LA FONCTION.SER (ajoutée Microsoft SQL Server 2019 CU7)

  • L’appel UDF avec un grand nombre de réévaluations des expressions scalatiques peut entraîner une erreur de planification non rendement (ajoutée dans Microsoft SQL Server 2019 CU7)

  • Erreur élevée lorsque la requête de référencement UDF utilise OPTION (RECOMPILE) (ajoutée Microsoft SQL Server 2019 CU7)

  • Erreurs d’autorisation élevées lorsque les vues s’appellent auFS inlinés (ajoutées Microsoft SQL Server 2019 CU9)

  • Violations d’accès se produisant lors de l’utilisation de la query_tsql_scalar_udf_inlined XEvent (ajoutée dans Microsoft SQL Server 2019 CU9) 

  • Comportement incohérent dû à l’indication scalaire UDF ne respectant pas l’indication de requête « QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n » (ajoutée à Microsoft SQL Server 2019 CU9)

  • Les UDF inlinés contiennent des agrégations qui peuvent entraîner une erreur de planification non rendement (ajoutée dans Microsoft SQL Server 2019 CU9) 

  • Erreurs mémoire non liées à une séquence d’opérations scalar sur la même variable dans les blocs conditionnels (ajoutés dans Microsoft SQL Server 2019 CU9)

  • Une violation d’accès peut se produire lorsqu’un objet appelle un scalar inlineable UDF (UDF1) avec un scalar inline UDF (UDF2) qui est utilisé comme paramètre d’entrée après la mise à niveau vers CU9 (ajouté à Microsoft SQL Server 2019 CU11)

  • L’inlination des UDF peut entraîner une erreur avec les codes d’erreur 6846, 1011 et 107 suivants (ajoutés dans Microsoft SQL Server 2019 CU11)


Cette mise à jour cumulative bloque également la mise en pointage dans les scénarios suivants :

  • Si la fonction FSO fait référence à certaines fonctions d’prochain groupe (par exemple, @@ROWCOUNT) qui peuvent modifier les résultats lorsqu’elles sont en plan (ajoutées dans Microsoft SQL Server 2019 CU2)

  • Lorsque les fonctions d’agrégation sont transmises en tant que paramètres à une FDF scala Microsoft SQL Server 2019 CU2)

  • Si les références UDF sont des vues intégrées (par exemple : OBJECT_ID) (ajoutés Microsoft SQL Server 2019 CU2)

  • Si l’UDF utilise des méthodes XML (ajoutées Microsoft SQL Server 2019 CU4)

  • Si l’UDF contient un SELECT avec ORDER BY sans « TOP 1 » (ajouté dans Microsoft SQL Server 2019 CU4)

  • Si la requête SELECT effectue une affectation conjointement avec la clause ORDER BY (par exemple, SELECT @x = @x +1 FROM table ORDER BY column_name) (ajouté dans Microsoft SQL Server 2019 CU4)

  • Si l’UDF contient plusieurs instructions RETURN (ajoutées Microsoft SQL Server 2019 CU5)

  • Si l’UDF est appelée à partir d’une instruction RETURN (ajoutée dans Microsoft SQL Server 2019 CU5)

  • Si l’UDF fait référence à STRING_AGG fonction de base (ajoutée Microsoft SQL Server 2019 CU5)

  • Si la définition UDF fait référence à des tables distantes (ajoutées Microsoft SQL Server 2019 CU6)

  • Si la requête d’appel UDF utilise DES ENSEMBLES DE REGROUPEMENT, CUBE ou ROLLUP (ajoutés Microsoft SQL Server 2019 CU6)

  • Si la requête Appel UDF contient une variable utilisée comme paramètre UDF pour l’affectation (par exemple, SELECT @y=2, @x=UDF(@y)) (ajoutée dans Microsoft SQL Server 2019 CU6)

  • Si l’UDF fait référence à des colonnes chiffrées (ajoutées Microsoft SQL Server 2019 CU11)

  • Si l’UDF contient des références à « WITH XMLNAMESPACES » (ajoutées Microsoft SQL Server 2019 CU11)

  • Si la requête qui demande l’ajout d’expressions de tables communes (CTES) au système UDF (ajouté dans Microsoft SQL Server 2019 CU11)


Après avoir mis à niveau vers Microsoft SQL Server 2019 CU2, mais avant de mettre à niveau vers CU5, vous devez évaluer à nouveau si un FDF est éligible pour le soulignement. Pour ce faire, actualisez les UDF scalais éligibles via l’une des méthodes suivantes :

  • Exécutez sp_refreshsqlmodule pour les UDF scalaux applicables (voir sp_refreshsqlmodule (Transact-SQL) pour plus d’informations sur cette procédure stockée système)

  • Modifiez ou re createz l’scalar UDF existant à l’aide de la définition, des autorisations et des propriétés existantes (voir ALTER FUNCTION (Transact-SQL))

Le script suivant génère un script pour actualiser les métadonnées des UDF scalais existants inlinés :

/*

Génère un script qui peut être utilisé pour actualiser tous les UDF scalais inligneables actifs.

RemarqueLa sp_refreshsqlmodule commande n’affecte aucune autorisation, propriétés étendues,

ou DÉFINIR les options associées à l’objet.

*/

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

Remarque Une fois la mise Microsoft SQL Server 2019 CU5 effectuée, nous allons dériver automatiquement l’inligne de UDF lors de la compilation.

Résolution

Ce problème est résolu dans la mise à jour cumulative suivante pour SQL Server :

Chaque nouvelle mise à jour cumulative SQL Server contient tous les correctifs et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

×