Guide de création d’un nouveau plan

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Les repères de plan influencent l'optimisation des requêtes en attachant des indicateurs de requête ou un plan fixe de requête à celles-ci. Dans le guide de plan, vous spécifiez l’instruction que vous souhaitez optimiser, ainsi qu’une clause OPTION contenant les indications de requête que vous souhaitez utiliser. ou un plan de requête spécifique à utiliser pour optimiser la requête. Lorsque la requête s’exécute, l’optimiseur de requête fait correspondre l’instruction Transact-SQL au repère de plan et soit attache la clause OPTION à la requête lors de l’exécution, soit utilise le plan de requête spécifié.

Un guide de plan applique à une requête soit un plan de requête fixe, soit des indications de requête, soit les deux.

Limitations et restrictions

  • Les arguments de sp_create_plan_guide doivent être indiqués dans l'ordre affiché. Quand vous fournissez des valeurs pour les paramètres de sp_create_plan_guide, tous les noms de paramètres doivent être spécifiés explicitement, ou aucun nom ne doit être spécifié. Par exemple, si @name = est spécifié, @stmt = , @type =, et ainsi de suite, doivent l’être aussi. De même, si @name = est omis et que seule la valeur du paramètre est indiquée, les noms de paramètres restants doivent également être omis, et seules leurs valeurs doivent être indiquées. Les noms d'arguments sont utilisés à des fins descriptives uniquement, pour une meilleure compréhension de la syntaxe. SQL Server ne vérifie pas que le nom de paramètre spécifié correspond au nom du paramètre à l’emplacement où le nom est utilisé.

  • Vous pouvez créer plus d’un guide de plan OBJECT ou SQL pour la même requête et le même lot ou module. Toutefois, un seul repère de plan peut être activé à un moment donné.

  • Vous ne pouvez pas créer de repère de plan de type OBJECT pour une valeur @module_or_batch qui fait référence à une procédure stockée, une fonction ou un déclencheur DML temporaire ou qui spécifie la clause WITH ENCRYPTION.

  • Si vous tentez de supprimer ou de modifier une fonction, une procédure stockée ou un déclencheur DML référencé par un repère de plan, qu'il soit activé ou désactivé, une erreur se produit. Le fait de tenter de supprimer une table sur laquelle un déclencheur est défini et référencé par un guide de plan provoque également une erreur.

autorisations

Pour créer un repère de plan de type OBJECT, il vous faut une autorisation ALTER sur l’objet référencé. Pour créer un repère de plan de type SQL ou TEMPLATE, il vous faut une autorisation ALTER pour la base de données active.

Créer un guide de plan à l’aide de SSMS

  1. Cliquez sur le signe plus (+) pour développer la base de données dans laquelle vous souhaitez créer un repère de plan, puis cliquez sur le signe plus (+) pour développer le dossier Programmabilité .

  2. Faites un clic droit sur le dossier Repères de plan et sélectionnez Nouveau repère de plan.... select_plan_guide

  3. Dans la boîte de dialogue Nouveau repère de plan , dans la zone Nom , entrez le nom du repère de plan.

  4. Dans la zone Instruction, saisissez l’instruction Transact-SQL en fonction de laquelle le repère de plan doit être appliqué.

  5. Dans la liste déroulante Type d’étendue, sélectionnez le type d’entité dans lequel figure l’instruction Transact-SQL. Cela spécifie le contexte permettant de faire correspondre l’instruction Transact-SQL au guide de plan. Les valeurs possibles sont OBJECT, SQLet TEMPLATE.

  6. Dans la zone Lot de portée, saisissez le texte du lot dans lequel figure l’instruction Transact-SQL. Le texte du lot ne peut pas inclure d’instruction USEdatabase. La zone Lot de portée est disponible uniquement lorsque SQL est sélectionné comme type de portée. Si aucune valeur n'est saisie dans le champ de lot de la portée lorsque SQL est le type de portée, la valeur du champ de lot est définie sur la même valeur que celle du champ Instruction.

  7. Dans la liste Nom du schéma de portée, entrez le nom du schéma contenant l'objet. La zone Nom de schéma de l'étendue est disponible uniquement lorsque Objet est sélectionné comme type d'étendue.

  8. Dans la zone Nom de l’objet de portée, saisissez le nom de la procédure stockée en Transact-SQL, de la fonction scalaire définie par l’utilisateur, de la fonction table à plusieurs instructions ou du déclencheur DML dans laquelle se trouve l’instruction Transact-SQL. La zone Nom d'objet de l'étendue est disponible uniquement lorsque Objet est sélectionné comme type d'étendue.

  9. Dans la zone Paramètres, saisissez le nom de paramètre et le type de données de tous les paramètres incorporés dans l’instruction Transact-SQL.

    Les paramètres s'appliquent uniquement lorsque l'une des conditions suivantes est remplie :

    • Le type de portée est SQL ou TEMPLATE. Si le type est TEMPLATE, les paramètres ne doivent pas avoir la valeur NULL.

    • L’instruction Transact-SQL est soumise en utilisant sp_executesql et une valeur pour le paramètre est spécifiée, ou SQL Server soumet en interne une instruction après l’avoir paramétrée.

  10. Dans la zone Indicateurs, saisissez les indicateurs de requête ou le plan de requête à appliquer à l’instruction Transact-SQL. Pour spécifier un ou plusieurs indicateurs de requête, entrez une clause OPTION valide.

  11. Cliquez sur OK.

plan_guide

Créer un guide de plan à l’aide de T-SQL

  1. Dans l' Explorateur d'objets, connectez-vous à une instance du Moteur de base de données.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.

  3. Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.

    -- creates a plan guide named Guide1 based on a SQL statement  
    EXEC sp_create_plan_guide   
        @name = N'Guide1',   
        @stmt = N'SELECT TOP 1 *   
                  FROM Sales.SalesOrderHeader   
                  ORDER BY OrderDate DESC',   
        @type = N'SQL',  
        @module_or_batch = NULL,   
        @params = NULL,   
        @hints = N'OPTION (MAXDOP 1)';  
    
    

Pour plus d’informations, consultez sp_create_plan_guide (Transact-SQL).