Criar um novo guia de planoCreate a New Plan Guide

Guias de plano influenciam a otimização de consulta, anexando a elas dicas de consulta ou um plano de consulta fixo.Plan guides influence query optimization by attaching query hints or a fixed query plan to them. No guia de plano, você especifica a instrução que deseja otimizar e uma cláusula OPTION que contém as dicas de consulta que deseja usar.In the plan guide, you specify the statement that you want optimized, and either an OPTION clause that contains query hints you want to use. ou um plano de consulta específico que você deseja usar para otimizar a consulta.or a specific query plan you want to use to optimize the query. Quando a consulta é executada, o otimizador de consultas faz a correspondência da instrução Transact-SQLTransact-SQL com o guia de plano, anexando a cláusula OPTION à consulta em tempo de execução ou usando o plano de consulta especificado.When the query executes, the query optimizer matches the Transact-SQLTransact-SQL statement to the plan guide and either attaches the OPTION clause to the query at run time or uses the specified query plan.

Um Guia de Plano aplica-se a um plano de consulta fixa, e/ou dicas de consulta, para uma consulta.A Plan Guide applies either a fixed query plan, and/or query hints, to a query.

Limitações e restrições Limitations and restrictions

  • Os argumentos para sp_create_plan_guide devem ser fornecidos na ordem em que aparecem.The arguments to sp_create_plan_guide must be provided in the order that is shown. Quando você fornece valores para os parâmetros de sp_create_plan_guide, todos os nomes de parâmetros devem ser especificados explicitamente ou nenhum deles deve ser especificado.When you supply values for the parameters of sp_create_plan_guide, all parameter names must be specified explicitly, or none at all. Por exemplo, se @name = for especificado, então @stmt =, @type = e assim por diante, também deverá ser especificado.For example, if @name = is specified, then @stmt = , @type =, and so on, must also be specified. Da mesma forma, se @name = for omitido e apenas o valor do parâmetro for fornecido, os nomes de parâmetro restantes também deverão ser omitidos e apenas seus valores deverão ser fornecidos.Likewise, if @name = is omitted and only the parameter value is provided, the remaining parameter names must also be omitted, and only their values provided. Os nomes de argumento são usados apenas para fins descritivos, para ajudar compreender a sintaxe.Argument names are for descriptive purposes only, to help understand the syntax. SQL ServerSQL Server não verifica se o nome de parâmetro especificado corresponde ao nome do parâmetro na posição em que o nome é usado. does not verify that the specified parameter name matches the name for the parameter in the position where the name is used.

  • Você pode criar mais de um guia de plano OBJECT ou SQL para a mesma consulta e lote ou módulo.You can create more than one OBJECT or SQL plan guide for the same query and batch or module. Porém, só um guia de plano pode ser ativado em um determinado momento.However, only one plan guide can be enabled at any given time.

  • Os guias de plano OBJECT não podem ser criados para um valor @module_or_batch que referencie um procedimento armazenado, uma função ou um gatilho DML que especifique a cláusula WITH ENCRYPTION ou que seja temporário.Plan guides of type OBJECT cannot be created for an @module_or_batch value that references a stored procedure, function, or DML trigger that specifies the WITH ENCRYPTION clause or that is temporary.

  • A tentativa de cancelar ou modificar uma função, procedimento armazenado ou gatilho DML referenciado por um guia de plano, habilitado ou desabilitado, provoca um erro.Trying to drop or modify a function, stored procedure, or DML trigger that is referenced by a plan guide, either enabled or disabled, causes an error. A tentativa de descartar uma tabela com um gatilho definido nela que é mencionado por um guia de plano também causa um erro.Trying to drop a table that has a trigger defined on it that is referenced by a plan guide also causes an error.

Permissões Permissions

Para criar um guia de plano do tipo OBJECT, você precisa da permissão ALTER no objeto referenciado.To create a plan guide of type OBJECT, you need ALTER permission on the referenced object. Para criar um guia de plano do tipo SQL ou TEMPLATE, você precisa de permissão ALTER no banco de dados atual.To create a plan guide of type SQL or TEMPLATE, you need ALTER permission on the current database.

Para criar um guia de plano, usando o SSMS Create a plan guide using SSMS

  1. Clique no sinal de adição para expandir o banco de dados no qual você deseja criar um guia de plano e clique no sinal de adição para expandir a pasta Programação .Click the plus sign to expand the database in which you want to create a plan guide, and then click the plus sign to expand the Programmability folder.

  2. Clique com o botão direito do mouse na pasta Guias de Plano e selecione Novo Guia de Plano….Right-click the Plan Guides folder and select New Plan Guide…. select_plan_guideselect_plan_guide

  3. Na caixa de diálogo Novo Guia de Plano , na caixa Nome , digite o nome do guia de plano.In the New Plan Guide dialog box, in the Name box, enter the name of the plan guide.

  4. Na caixa Instrução , insira a instrução Transact-SQLTransact-SQL à qual o guia de plano deve ser aplicado.In the Statement box, enter the Transact-SQLTransact-SQL statement against which the plan guide is to be applied.

  5. Na lista Tipo de escopo , selecione o tipo de entidade na qual a instrução Transact-SQLTransact-SQL aparece.In the Scope type list, select the type of entity in which the Transact-SQLTransact-SQL statement appears. Isso especifica o contexto para se fazer a correspondência da instrução Transact-SQLTransact-SQL ao guia de plano.This specifies the context for matching the Transact-SQLTransact-SQL statement to the plan guide. Os valores possíveis são OBJECT, SQLe TEMPLATE.Possible values are OBJECT, SQL, and TEMPLATE.

  6. Na caixa Lote de escopo , digite o texto de lote no qual a instrução Transact-SQLTransact-SQL aparece.In the Scope batch box, enter the batch text in which the Transact-SQLTransact-SQL statement appears. O texto de lote não pode incluir uma instrução USE*database* .</span><span class="sxs-lookup"><span data-stu-id="5468b-133">The batch text cannot include a USEdatabase statement. A caixa Lote de escopo está disponível apenas quando SQL é selecionado como um tipo de escopo.The Scope batch box is only available when SQL is selected as a scope type. Se nada for inserido na caixa de lote de escopo quando o SQL for o tipo de escopo, o valor do texto de lote será definido com o mesmo valor que a caixa Instrução .If nothing is entered in the scope batch box when SQL is the scope type, then the value of the batch text is set to the same value as is in the Statement box.

  7. Na lista Nome do esquema de escopo , digite o nome do esquema no qual o objeto está contido.In the Scope schema name list, enter the name of the schema in which the object is contained. A caixa Nome do esquema de escopo está disponível apenas quando Objeto é selecionado como um tipo de escopo.The Scope schema name box is only available when Object is selected as a scope type.

  8. Na caixa Nome do objeto de escopo , digite o nome do Transact-SQLTransact-SQL procedimento armazenado, função escalar definida pelo usuário, função com valor de tabela de várias instruções ou gatilho DML no qual a instrução Transact-SQLTransact-SQL aparece.In the Scope object name box, enter the name of the Transact-SQLTransact-SQL stored procedure, user-defined scalar function, multistatement table-valued function, or DML trigger in which the Transact-SQLTransact-SQL statement appears. A caixa Nome do objeto de escopo está disponível apenas quando Objeto é selecionado como um tipo de escopo.The Scope object name box is only available when Object is selected as a scope type.

  9. Na caixa Parâmetros , digite o nome do parâmetro e os tipos de dados de todos os parâmetros inseridos na instrução Transact-SQLTransact-SQL .In the Parameters box, enter the parameter name and data type of all parameters that are embedded in the Transact-SQLTransact-SQL statement.

    Parâmetros são aplicados somente quando uma das seguintes condições for verdadeira:Parameters apply only when either of the following is true:

    • O tipo de escopo é SQL ou TEMPLATE.The scope type is SQL or TEMPLATE. No caso de TEMPLATE, parâmetros não devem ser NULL.If TEMPLATE, parameters must not be NULL.

    • A instrução Transact-SQLTransact-SQL é enviada usando-se sp_executesql e um valor para o parâmetro é especificado ou SQL ServerSQL Server envia internamente uma instrução depois de parametrizá-la.The Transact-SQLTransact-SQL statement is submitted by using sp_executesql and a value for the parameter is specified, or SQL ServerSQL Server internally submits a statement after parameterizing it.

  10. Na caixa Dicas , digite as dicas de consulta ou o plano de consulta a ser aplicado à instrução Transact-SQLTransact-SQL .In the Hints box, enter the query hints or query plan to be applied to the Transact-SQLTransact-SQL statement. Para especificar uma ou mais dicas de consulta, digite uma cláusula OPTION válida.To specify one or more query hints, enter a valid OPTION clause.

  11. Clique em OK.Click OK.

plan_guide

Criar um guia de plano usando o T-SQL Creat a plan guide using T-SQL

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de DadosDatabase Engine.In Object Explorer, connect to an instance of Mecanismo de Banco de DadosDatabase Engine.

  2. Na barra Padrão, clique em Nova Consulta.On the Standard bar, click New Query.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar.Copy and paste the following example into the query window and click Execute.

    -- 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)';  
    

    Para obter mais informações, consulte sp_create_plan_guide (Transact-SQL).For more information, see sp_create_plan_guide (Transact-SQL).