Souci suite � la Migration de bases de 2014 vers 2019
par
, 20/01/2024 � 10h18 (821 Affichages)
En fait ce qui s'est pass� a �t� pr�vu par SQL Server...
Depuis la version 2017, Microsoft a beaucoup travaill� sur de nouvelles optimisations dans le cadre d'un projet appel� "Intelligent Query Processor" (IQP), dont l'une des fonctionnalit� consiste � supprimer l'appel de la fonction (UDF) en l'int�grant directement dans la requ�te afin que le tout soit optimis�. Cela s'appelle l'inligning (enlignement)...
En effet, les requ�tes ont un comportement ensembliste (toutes les op�rations s'effectuent en m�me temps <=> parall�lisme) alors qu'une fonction est toujours it�rative (c'est � dire que le code se d�roule s�quentiellement) ce qui fait que l'introduction de fonctions dans le code d'une requ�te casse ordinairement le fonctionnement ensembliste de la requ�te et la rend it�rative et par cons�quent lente... Pour palier � ce probl�me de performance Microsoft Research a initi� le projet "FROID" a eut pour but de r�crire les requ�tes en r�int�grant le code SQL de la fonction dans la requ�te. . On obtient alors une requ�te parfaitement ensembliste et les performances n'ont plus rien � voir....
Cependant, ce mode a un inconv�nient : il �tudie toutes les possibilit�s d'ex�cution simultan�ment, alors que l'it�ration dans le code d'une UDF coupe des branches via les commande de contr�le telles que IF THEN ELSE...
Sachant cela, il y a quelques rares cas ou cet "enlignement" de la fonction peut devenir un probl�me et c'est votre cas... En effet, une requ�te est compil�e d'un seul bloc et l'absence de certains objets � ce moment peut se r�v�ler critique...
Pour palier � cet effet de bord, Microsoft SQL Server a rajout� une option dans la cr�ation des fonctions (INLINE = OFF) afin d'interdire l'enlignement d'une UDF au cas ou cela produirait une anomalie...
Vous �tes tomb� dessus !
A +