Partager via


Présentation de l'application forcée d'un plan

Mis à jour : 15 septembre 2007

SQL Server 2005 propose l'indicateur de requête USE PLAN. USE PLAN permet d'obliger l'optimiseur de requête à utiliser un plan de requête spécifié pour une requête. L'indicateur de requête USE PLAN fonctionne par l'acceptation du plan de requête que vous souhaitez utiliser au format XML en tant qu'argument. USE PLAN peut être utilisé pour les requêtes dont les plans ralentissent le temps d'exécution et pour lesquelles vous savez qu'il existe de meilleurs plans. Vous y faites généralement appel lorsque des requêtes qui s'exécutaient très bien dans une version antérieure de SQL Server, s'exécutent mal dans une version mise à niveau, qu'il s'agisse d'un service pack ou d'une mise à niveau complète de la version. La plupart du temps, une mise à niveau améliore les délais d'exécution des requêtes, ou du moins ne les change pas, mais il peut y avoir quelques exceptions. L'indicateur de requête USE PLAN aide à gérer les cas où un plan de requête sélectionné par l'optimiseur de requête d'une version antérieure du produit s'avère préférable à celui qui est sélectionné après la mise à niveau.

L'indicateur de requête USE PLAN peut être utilisé avec les repères de plan pour remédier aux performances médiocres des requêtes dans les applications déployées. Les repères de plan servent à appliquer les indicateurs de requête aux requêtes lorsque vous ne pouvez pas, ou ne souhaitez pas, modifier directement l'application. Pour plus d'informations sur les repères de plan, consultez Optimisation des requêtes dans les applications déployées à l'aide des repères de plan. Pour prendre connaissance de scénarios plus détaillés qui expliquent comment appliquer l'indicateur de plan USE PLAN dans les repères de plan, consultez Exemple d'application forcée d'un plan : Création d'un repère de plan utilisant un indicateur de requête USE PLAN et Exemple d'application forcée d'un plan : Création d'un repère de plan pour forcer l'application d'un plan obtenu par la réécriture d'une requête.

L'application forcée d'un plan peut intervenir avec la plupart des types de requêtes SELECT. Ces requêtes peuvent notamment porter sur des tables, des index cluster et non-cluster, des vues indexées, des tables et des index partitionnés. Il est impossible de spécifier l'indicateur USE PLAN avec les instructions INSERT, UPDATE ou DELETE.

Les plans de requête générés avec l'indicateur de requête USE PLAN sont mis en cache de la même manière que les autres plans de requête.

Limites de l'application forcée d'un plan

L'application forcée d'un plan impose à une requête un seul plan d'exécution statique. L'application forcée d'un plan empêche l'optimiseur de requête de s'adapter à la modification des tailles et des distributions des données, aux nouveaux index et à d'autres variables. Utilisée à mauvais escient, l'application forcée d'un plan peut par conséquent nuire aux performances. N'utilisez l'application forcée d'un plan qu'après avoir passé en revue toutes les autres possibilités d'amélioration des performances d'une requête, comme l'utilisation de statistiques actualisées et précises, ou d'index optimisés. L'application forcée d'un plan doit être utilisée avec parcimonie et uniquement par des administrateurs de base de données et des développeurs expérimentés, parfaitement au fait des problèmes de performance et de l'environnement de leur base de données et des applications.

Lorsque vous utilisez l'indicateur de requête USE PLAN pour influencer la compilation d'une requête dans une application déployée, il est préférable que cet indicateur soit à l'intérieur d'un repère de plan plutôt que directement imbriqué dans l'application. Ce faisant, vous pouvez déjouer les pièges suivants :

  • Vous pouvez modifier ou retirer l'indicateur sans modifier ou recompiler l'application. Il arrive, dans certains cas, que l'indicateur USE PLAN, qui s'appliquait dans une version de SQL Server, ne s'applique pas dans un service pack ou une version ultérieure. Par conséquent, il vous faudra peut-être modifier ou supprimer un indicateur USE PLAN après le déploiement d'une application.
  • Mieux vaut éviter d'utiliser un indicateur de grande taille dans la requête. Cette dernière est plus facile à lire.
    ms186343.note(fr-fr,SQL.90).gifImportant :
    En cas de création d'un repère de plan utilisant USE PLAN, il vous faut vérifier, au cours du test, que la requête dont vous souhaitez forcer l'application du plan est le plus souvent soumise avec une demande de curseur. Les plans de requête des requêtes curseur diffèrent de ceux utilisés avec des requêtes non-curseur. Par conséquent, pour créer un repère de plan spécifiant un indicateur USE PLAN qui s'applique à une requête soumise avec une demande de curseur, il faut que le repère de plan spécifie un plan de curseur. Pour plus d'informations, consultez Utilisation de l'indicateur de requête USE PLAN sur les requêtes avec curseurs.

L'application forcée d'un plan n'est pas prise en charge pour les types de requêtes suivants dans SQL Server 2005 :

Voir aussi

Concepts

Définition de plans de requêtes à l'aide de l'application forcée d'un plan

Autres ressources

Performance des requêtes

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

15 septembre 2007

Contenu modifié :
  • Correction d'une instruction inexacte stipulant que les plans de requête générés avec USE PLAN ne seront pas mis en cache si le littéral de chaîne résultant dépasse 8 Ko.