Partilhar via


Usar o SQL Server Profiler para criar e testar guias de execução

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

Ao criar um guia de plano, você pode usar o SQL Server Profiler para capturar o texto de consulta exato para uso no argumento statement_text do procedimento armazenado sp_create_plan_guide. Isso ajuda a garantir que o guia de plano seja associado à consulta no momento da compilação. Depois que o guia de plano é criado, o SQL Server Profiler também pode ser usado para testar se o guia de plano está, de fato, sendo correspondido à consulta. Geralmente, você deve testar guias de plano usando o SQL Server Profiler para verificar se sua consulta está sendo correspondida ao seu guia de plano.

Capturando texto de consulta usando o SQL Server Profiler

Se você executar uma consulta e capturar o texto exatamente como foi enviado ao SQL Server usando o SQL Server Profiler, poderá criar um guia de plano do tipo SQL ou TEMPLATE que corresponderá exatamente ao texto da consulta. Isso garante que o guia de plano seja usado pelo otimizador de consulta.

Considere a seguinte consulta enviada por um aplicativo como um lote autônomo:

SELECT COUNT(*) AS c  
FROM Sales.SalesOrderHeader AS h  
INNER JOIN Sales.SalesOrderDetail AS d  
  ON h.SalesOrderID = d.SalesOrderID  
WHERE h.OrderDate BETWEEN '20000101' and '20050101';  

Suponha que tu queiras que esta consulta seja executada usando uma operação de junção por mesclagem, mas SHOWPLAN indica que a consulta não está usando uma junção por mesclagem. Não é possível alterar a consulta diretamente na aplicação, por isso, em alternativa, cria-se um guia de plano para especificar que a dica de consulta MERGE JOIN seja adicionada à consulta no momento da compilação.

Para capturar o texto da consulta exatamente como o SQL Server a recebe, siga estas etapas:

  1. Inicie um rastreamento do SQL Server Profiler, certificando-se de que o tipo de evento SQL:BatchStarting está selecionado.

  2. Faça com que o aplicativo execute a consulta.

  3. Pause o rastreamento do SQL Server Profiler.

  4. Clique no evento SQL:BatchStarting, que corresponde à consulta.

  5. Clique com o botão direito do mouse e selecione Extrair dados do evento.

    Importante

    Não tente copiar o texto do lote selecionando-o no painel inferior da janela de rastreamento do Profiler. Isso pode fazer com que o guia de plano criado não corresponda ao lote original.

  6. Salve os dados do evento em um arquivo. Este é o texto do lote.

  7. Abra o arquivo de texto em lote no Bloco de Notas e copie o texto para o buffer de copiar e colar.

  8. Crie o guia de plano e cole o texto copiado dentro das aspas ('') especificadas para o argumento @stmt. Você deve escapar de aspas simples no argumento @stmt precedendo-as com outras aspas simples. Tenha cuidado para não adicionar ou remover quaisquer outros caracteres quando inserir estas aspas simples. Por exemplo, a data literal '20000101' deve ser delimitada como ''20000101''.

Aqui está o guia do plano:

EXEC sp_create_plan_guide   
    @name = N'MyGuide1',  
    @stmt = N'<paste the text copied from the batch text file here>',  
    @type = N'SQL',  
    @module_or_batch = NULL,  
    @params = NULL,  
    @hints = N'OPTION (MERGE JOIN)';  

Guias para planos de teste usando o SQL Server Profiler

Para verificar se um guia de plano está a corresponder a uma consulta, siga estas etapas:

  1. Inicie um rastreamento do SQL Server Profiler, certificando-se de que o tipo de evento Showplan XML está selecionado (localizado no nó Desempenho).

  2. Faça com que o aplicativo execute a consulta.

  3. Pause o rastreamento do SQL Server Profiler.

  4. Encontre o evento Showplan XML para a consulta afetada.

    Observação

    O Showplan XML for Query Compile evento não pode ser usado. PlanGuideDB não existe nesse evento.

  5. Se o guia de plano for do tipo OBJECT ou SQL, verifique se o evento Showplan XML contém os atributos PlanGuideDB e PlanGuideName para o guia de plano que esperava corresponder à consulta. Ou, no caso de um guia de plano TEMPLATE, verifique se o evento Showplan XML contém os atributos TemplatePlanGuideDB e TemplatePlanGuideName para o guia de plano esperado. Isto confirma que o guia do plano está a funcionar. Esses atributos estão contidos no <StmtSimple> elemento do plano.

Ver também

sp_create_plan_guide (Transact-SQL)