Les plans de requête modifient les performances dans SQL Server 2014

10

Nous avons récemment mis à niveau notre serveur de SQL Server 2008R2 vers SQL Server 2014. Nous avons une requête qui a bien fonctionné en 2008R2, mais qui fonctionne maintenant beaucoup plus lentement en 2014 et a un mauvais plan d'exécution.

J'ai fait plusieurs tests ...

  1. Remettez la base de données 2014 en mode de compatibilité 2008/2012.
  2. Testez la requête à l'aide de la pagination.

Dans les deux cas, la requête a été exécutée de la même manière et plus rapide que SQL Server 2008R2.

Pourquoi le plan est-il si mauvais et la requête exécutée si longtemps dans SQL Server 2014?

Estimé / réel

Cette image montre 2 requêtes, l'une utilisant le numéro de référence comme elle a fonctionné dans 2008R2, puis la seconde est le correctif avec pagination. Les deux ont fonctionné en 2014, tous deux très différents, mais en 2008, nous constatons les mêmes performances que si nous avions utilisé la pagination en 2014.

Jeff
la source

Réponses:

7

Ce n'est pas un problème, c'est par conception et est considéré comme une amélioration des performances.

Si vos requêtes ne s'exécutent pas comme prévu, vous devrez résoudre ce problème dans le code de votre base de données / application.

Vous pouvez forcer l'ancien estimateur de carnalité en utilisant l'indicateur de trace 9481 au niveau du serveur, de la session ou de la requête (en utilisant OPTION (QUERYTRACEON 9481)). Cela le forcera quel que soit le niveau de compatibilité de la base de données.

Il y a aussi une tonne d'informations que l' équipe CSS a publiées ici .

Un article plus détaillé sur le Cardanility Estimator et les changements autour de ce processus dans SQL Server 2014, inclut un exemple.

Paul White 9
la source
Cela ressemble à une mauvaise excuse pour quelque chose qui a mal tourné
dvdmn