KB4051361 – Informations d’objectif de ligne Optimizer dans le plan d’exécution de requête ajouté en SQL Server 2014, 2016 et 2017

S’applique à
SQL Server 2016 Standard - duplicate (do not use) 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 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Résumé

Ajoutez le nouvel attribut de plan d’exécution de requête EstimateRowsWithoutRowGoal à la mise à jour cumulative 3 de SQL Server 2017 et au Microsoft SQL Server 2016 Service Pack 2 (SP2).

Lorsque l’optimiseur de requête estime le coût d’un plan d’exécution de requête, il suppose généralement que toutes les lignes qualifiantes de toutes les sources doivent être traitées. Toutefois, certaines requêtes entraînent l’optimiseur de requête à rechercher un plan qui renverra un plus petit nombre de lignes plus rapidement. Cela peut se produire si la requête utilise une clause TOP , un indicateur de requête FAST number_rows , une clause IN ou EXISTS ou une instruction SET ROWCOUNT { number | @number\_var } . Dans ce cas, l’optimiseur utilise un objectif de ligne lorsqu’il estime le plan de requête. Si le plan d’objectif de ligne est appliqué, le nombre estimé de lignes dans le plan d’exécution de la requête est réduit. Cela est dû au fait que le plan suppose qu’un plus petit nombre de lignes devra être traité pour atteindre l’objectif de ligne.

Remarque L’estimation effectuée à l’aide de l’objectif de ligne est approximative. Si la distribution réelle des données n’est pas uniforme, elle peut être inférieure au nombre réel de lignes à traiter. Par conséquent, il peut créer un plan de requête inefficace. Pour contourner ce problème, vous pouvez utiliser l’option de requête USE HINT (« DISABLE_OPTIMIZER_ROWGOAL ») ou l’indicateur de trace 4138.

Pour plus d’informations, consultez La mise à jour introduit l’argument d’indicateur de requête USE HINT dans SQL Server 2016. Toutefois, il peut être difficile d’identifier, dans des requêtes complexes, si un objectif de ligne est appliqué et dans quelle mesure il affecte le choix du plan.

À l’aide de l’attribut EstimateRowsWithoutRowGoal , vous pouvez comparer les résultats à ceux de l’attribut EstimateRows pour voir dans quelle mesure l’objectif de ligne affecte les estimations de l’optimiseur de requête.

Remarque Si l’objectif de ligne n’est pas appliqué à un opérateur de plan de requête particulier, cet attribut n’est pas inclus.

Informations supplémentaires

Cette mise à jour est incluse dans la mise à jour cumulative suivante pour SQL Server :

Mise à jour cumulative 3 pour SQL Server 2017

À 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 :

Dernière mise à jour cumulative pour SQL Server 2017

Informations sur les Service Packs pour SQL Server

Cette mise à jour est introduite dans les Service Packs suivants pour SQL Server :

Service Pack 2 pour SQL Server 2016

Service Pack 3 pour SQL Server 2014

À 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

Références

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