KB3189813 - La mise à jour introduit l’argument d’indicateur de requête USE HINT dans SQL Server 2016

S’applique à
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Web - duplicate (do not use)

Résumé

Cette mise à jour introduit un nouvel argument d’indicateur de requête, USE HINT, qui vous permet de piloter l’optimiseur de requête sans informations d’identification élevées ou sans être membre du rôle serveur sysadmin. La syntaxe de ce nouvel indicateur de requête est la suivante :

<query_hint > ::=
{
USE HINT(N'key' [ [, ]...n ])
}

      

Cette mise à jour introduit également les options d’indicateur suivantes qui peuvent être utilisées avec l’argument USE HINT.

Option Indicateur de trace équivalent Description Produits concernés
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS TF 9476 Amène SQL Server à générer un plan de requête à l’aide de l’hypothèse de confinement simple au lieu de l’hypothèse de confinement de base par défaut pour les jointures, sous le modèle d’estimation de cardinalité de l’optimiseur de requête de SQL Server 2014 (12.x) ou version ultérieure.
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES TF 4137 Amène SQL Server à générer un plan en utilisant une sélectivité minimale lors de l’estimation ET des prédicats pour les filtres pour tenir compte de la corrélation. Ce nom d’indicateur est parallèle à l’indicateur de trace 4137 lorsqu’il est utilisé avec le modèle d’estimation de cardinalité de SQL Server 2012 (11.x) et versions antérieures, et a un effet similaire lorsque l’indicateur de trace 9471 est utilisé avec le modèle d’estimation de cardinalité de SQL Server 2014 (12.x) ou version ultérieure.
DISABLE_BATCH_MODE_ADAPTIVE_JOINS Désactive les jointures adaptatives en mode batch. à partir de SQL Server 2017
DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK Désactive les commentaires d’allocation de mémoire en mode batch. à partir de SQL Server 2017
DISABLE_DEFERRED_COMPILATION_TV Désactive la compilation différée des variables de table. à partir de SQL Server 2019
DISABLE_INTERLEAVED_EXECUTION_TVF Désactive l’exécution entrelacée pour les fonctions table à plusieurs instructions. à partir de SQL Server 2017
DISABLE_OPTIMIZED_NESTED_LOOP TF 2340 Indique au processeur de requêtes de ne pas utiliser d’opération de tri (tri par lots) pour les jointures de boucles imbriquées optimisées lors de la génération d’un plan de requête.
DISABLE_OPTIMIZER_ROWGOAL TF 4138 Amène SQL Server à générer un plan qui n’utilise pas les modifications d’objectif de ligne avec les requêtes qui contiennent les mots clés suivants :

  • TOP
  • OPTION (RAPIDE N)
  • IN
  • EXISTS
DISABLE_PARAMETER_SNIFFING TF 4136 Indique à l’optimiseur de requête d’utiliser la distribution moyenne des données lors de la compilation d’une requête avec un ou plusieurs paramètres. Cette instruction rend le plan de requête indépendant de la valeur de paramètre qui a été utilisée pour la première fois lors de la compilation de la requête. Utilisez cet indicateur pour remplacer le paramètre de configuration étendue par base de données PARAMETER_SNIFFING=OFF.
DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK Désactive les commentaires d’allocation de mémoire en mode ligne. à partir de SQL Server 2019
DISABLE_TSQL_SCALAR_UDF_INLINING Désactive le calcul scalaire du contenu UDF. à partir de SQL Server 2019
DISALLOW_BATCH_MODE Désactive l’exécution en mode batch. à partir de SQL Server 2019
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS TF 4139 Active la génération automatique de statistiques rapides (modification d’histogramme) pour toute colonne d’index principale pour laquelle l’estimation de la cardinalité est nécessaire. L’histogramme utilisé pour estimer la cardinalité sera ajusté au moment de la compilation de la requête pour prendre en compte la valeur maximale ou minimale réelle de cette colonne.
ENABLE_QUERY_OPTIMIZER_HOTFIXES TF 4199 Active les correctifs logiciels de l’optimiseur de requête (modifications publiées dans SQL Server Mises à jour cumulative et Service Packs). Utilisez cet indicateur pour remplacer le paramètre de configuration étendue par base de données QUERY_OPTIMIZER_HOTFIXES=ON.
FORCE_DEFAULT_CARDINALITY_ESTIMATION TF 9481 Force l’optimiseur de requête à utiliser un modèle d’estimation de la cardinalité qui correspond au niveau de compatibilité de la base de données actuel. Utilisez cet indicateur pour remplacer le paramètre de configuration étendue par base de données LEGACY_CARDINALITY_ESTIMATION=ON.
FORCE_LEGACY_CARDINALITY_ESTIMATION TF 9481 Force l’optimiseur de requête à utiliser le modèle d’estimation de la cardinalité de SQL Server 2012 (11.x) et versions antérieures. Utilisez cet indicateur pour remplacer le paramètre de configuration étendue par base de données LEGACY_CARDINALITY_ESTIMATION=ON.
QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n Force le comportement de l’optimiseur de requête au niveau de la requête. Ce comportement se produit comme si la requête a été compilée avec le niveau de compatibilité de base de données n, où n est un niveau de compatibilité de base de données pris en charge. Reportez-vous à sys.dm_exec_valid_use_hints pour obtenir la liste des valeurs actuellement prises en charge pour n. à partir de SQL Server 2017 (14.x) CU10

Pour plus d’informations, reportez-vous à la rubrique Conseils (Transact-SQL) - Requête.

Informations supplémentaires

Cette mise à jour est incluse dans le Service Pack 1 pour SQL Server 2016.

À propos des builds de SQL Server 2016

Chaque nouvelle version de SQL Server 2016 contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la version précédente. Nous vous recommandons d’installer la dernière version de SQL Server 2016.

Les scénarios dans lesquels SQL Server comportement de l’optimiseur de requête (QO) doit être indiqué sont assez courants et sont traditionnellement résolus à l’aide de plusieurs indicateurs de trace (documentés et non documentés). Toutefois, lorsque les indicateurs de trace sont définis globalement, ils peuvent avoir un effet négatif sur d’autres charges de travail. De plus, leur activation par session n’est pas pratique avec les applications existantes, et leur activation par requête avec OPTION QUERYTRACEON nécessite l’appartenance au rôle de serveur fixe sysadmin. (Bien que vous puissiez contourner ce comportement à l’aide d’un guide de plan ou d’une procédure stockée, des informations d’identification élevées sont toujours nécessaires.)

Les indicateurs de trace sont utilisés pour définir temporairement des caractéristiques de serveur spécifiques ou pour désactiver un comportement particulier. Ils peuvent être difficiles à gérer et à comprendre.

Pour plus d’informations sur les indicateurs de trace, reportez-vous à la rubrique Indicateurs de trace (Transact-SQL) sur le site web MSDN (Microsoft Developer Network).

Références

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