Execute novamente um plano de consulta real específico

7

Eu capturei um plano de consulta real para uma consulta específica.

Depois disso, mudei algumas coisas (incluindo a atualização das estatísticas) e refiz essa consulta específica. Agora, o plano de consulta real é diferente (o que faz sentido).

A consulta agora é muito mais rápida. Estou curioso para saber se o novo plano de execução tem algo a ver com isso, porque outras alterações (alterações na configuração de E / S, configurações da VM, reinicialização da instância do sql etc.) também podem estar causando a melhora no desempenho. Para testar isso, gostaria de executar a consulta mais uma vez e tentar forçar o SQL Server a usar o plano de execução antigo.

Pergunta : existe uma maneira de executar novamente uma consulta com um plano de execução fornecido pelo usuário ou mesmo executar uma consulta diretamente a partir desse plano?

Aqui está o que eu tentei descobrir isso:

Portanto, isso é possível? Se sim: como?

Jeroen
fonte
Eu usei o seguinte para verificar consultas de execução longa e curta em meus sistemas de desenvolvimento e teste. Limpe os planos, buffers, caches existentes e execute as consultas com o rastreio ativado. Usando as funções drop / free do dbcc para limpar a sessão, cache, buffers, etc. e ativar ou desativar o rastreamento. Independente, mas útil, é ver qual é o acordo com os dados na tabela. Observe que vi que você estava usando o S2K12, portanto, essas referências devem corresponder. O comportamento pode ser diferente nas versões anteriores do Sql Server. Espero que isto ajude. DBCC FREESYSTEMCACHE, DROPCLEANBUFFERS, Trace On, show_statistics etc.
Ray Porrata

Respostas:

10

Sim.

Você precisa da USE PLANdica.

Em que você fornece o XMLdo primeiro plano.

SELECT *
FROM T
OPTION (USE PLAN N'<?xml version="1.0" encoding="utf-16"?> ....')

Embora não garanta que o plano seja exatamente o mesmo (por exemplo, operadores escalares de computação podem se movimentar, por exemplo), provavelmente será bem próximo.

Martin Smith
fonte
Obrigado, exatamente o que eu estava pedindo. (Infelizmente, isso me deixa com um novo problema: " Não foi possível encontrar um plano de consulta porque o otimizador excedeu o número de operações permitidas enquanto procurava pelo plano especificado na dica USE PLAN. ", Mas acho que é outro problema para lidar.)
Jeroen
@Jeroen - Hmmm. Não tenho certeza se há alguma solução para isso. Talvez haja algum sinalizador de rastreamento que aumentaria esse limite, mas se houver, eu não o conheço!
Martin Smith
Não tem problema, obrigado pela sua ajuda em qualquer caso: aprendeu algo novo hoje! : D
Jeroen
@Jeroen - Talvez o TF 8780 não documentado que desativa o tempo limite do otimizador ? Não tenho certeza se isso teria o efeito desejado.
Martin Smith