web-dev-qa-db-fra.com

Les plans de requête changent de performance pire dans SQL Server 2014

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

J'ai fait plusieurs tests ...

  1. Allumez le DB 2014 Retour au mode de compatibilité 2008/2012.
  2. Testez la requête en utilisant la pagination.

Ces deux ont abouti à la requête qui fonctionne de la même manière que celle-ci et est rapide que SQL Server 2008R2.

Pourquoi le plan est-il si mauvais et une question de requête si longtemps dans SQL Server 2014?

Estimated/Actual

Cette image montre 2 requêtes, l'une utilisatrice de la façon dont il a couru en 2008R2, puis la seconde est la solution avec la pagination. Tous deux ont couru en 2014, tous deux très différents, mais en 2008, nous voyons la même performance que si nous utilisions la pagination en 2014.

10
Jeff

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 sont pas exécutées comme prévu, vous devrez vous adresser à ceci dans le code de votre base de données/application.

Vous pouvez forcer l'ancien estimateur de la carnalité à l'aide du drapeau de trace 9481 au niveau du serveur, de la session ou de la requête (en utilisant OPTION (QUERYTRACEON 9481)). Cela l'obligera, 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é ici .

Un poste plus détaillé sur l'estimateur de cardanilité et les modifications autour de ce processus dans SQL Server 2014, comprend l'exemple.

7
user507