KB2952444 - CORRECTIF : Performances médiocres lors de l’utilisation de variables de table dans SQL Server 2012 ou SQL Server 2014

S’applique à
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Web SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Symptômes

Lorsque vous remplissez une variable de table avec de nombreuses lignes, puis que vous la joignez à d’autres tables, l’optimiseur de requête peut choisir un plan de requête inefficace, ce qui peut entraîner des performances de requête lentes.

Résolution

Après avoir appliqué ce correctif logiciel, vous pouvez activer l’indicateur de trace 2453 pour autoriser une variable de table à déclencher la recompilation lorsqu’un nombre suffisant de lignes est modifié. Cela peut permettre à l’optimiseur de requête de choisir un plan plus efficace.

Ce problème a été résolu dans la mise à jour cumulative et/ou Service Packs pour SQL Server suivants.

Mise à jour cumulative 3 pour SQL Server 2014 /en-us/help/2984923

À propos des mises à jour cumulatives pour SQL Server

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels 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 :

      

Service Pack 2 pour SQL Server 2012

À propos des Service Packs pour SQL Server

Les Service Packs sont cumulatifs. Chaque nouvelle version contient tous les correctifs fournis dans les Service Packs précédents et tous les nouveaux correctifs. Il est recommandé d’appliquer le dernier Service Pack et la dernière mise à jour cumulative pour ce Service Pack. Il n'est donc pas nécessaire d'installer la version antérieure d'un Service Pack avant d'installer la dernière version disponible. Consultez le tableau 1 de l’article suivant pour trouver plus d’informations sur le dernier Service Pack et la dernière mise à jour cumulative :

Comment déterminer la version, l’édition et le niveau de mise à jour de SQL Server et de ses composants
      

Informations supplémentaires

Lorsque vous utilisez une variable de table dans un lot ou une procédure, la requête est compilée et optimisée pour l’état vide initial de la variable de table. Si cette variable de table est remplie avec de nombreuses lignes au moment de l’exécution, le plan de requête précompilé peut ne plus être optimal. Par exemple, la requête peut joindre une variable de table avec une boucle imbriquée, car cela est généralement plus efficace pour un petit nombre de lignes. Ce plan de requête peut être inefficace si la variable de table comporte des millions de lignes. Une jointure de hachage peut être un meilleur choix dans de telles conditions. Pour obtenir un nouveau plan de requête, il doit être recompilé. Toutefois, contrairement à d’autres tables utilisateur ou temporaires, la modification du nombre de lignes dans une variable de table ne déclenche pas une recompilation de la requête. En règle générale, vous pouvez contourner ce problème avec OPTION (RECOMPILE), qui a ses propres frais généraux.
L’indicateur de trace 2453 permet de recompiler les requêtes sans OPTION (RECOMPILE). Cet indicateur de trace diffère de OPTION (RECOMPILE) sur deux aspects principaux.
(1) Elle utilise le même seuil de nombre de lignes que les autres tables. La requête n’a pas besoin d’être compilée pour chaque exécution, contrairement à OPTION (RECOMPILE). Il déclencherait la recompilation uniquement lorsque la modification du nombre de lignes dépasse le seuil prédéfini.
(2) OPTION (RECOMPILE) force la requête à afficher un aperçu des paramètres et à optimiser la requête pour eux. Cet indicateur de trace ne force pas l’affichage des paramètres.

Notez que cet indicateur de trace doit être activé au moment de l’exécution. Vous ne pouvez pas utiliser cet indicateur de trace avec QUERYTRACEON. Cet indicateur de trace doit être utilisé avec prudence, car il peut augmenter le nombre de recompilations de requêtes, ce qui peut coûter plus cher que les économies résultant d’une meilleure optimisation des requêtes.

État

Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».