Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obtenho um Plano de Execução de Consulta no SQL Server?


Existem vários métodos para obter um plano de execução, qual deles usar dependerá de suas circunstâncias. Normalmente, você pode usar o SQL Server Management Studio para obter um plano, no entanto, se por algum motivo você não puder executar sua consulta no SQL Server Management Studio, poderá ser útil obter um plano por meio do SQL Server Profiler ou inspecionando o cache do plano.

Método 1 - Usando o SQL Server Management Studio


O SQL Server vem com alguns recursos interessantes que facilitam a captura de um plano de execução, simplesmente certifique-se de que o item de menu "Incluir Plano de Execução Real" (encontrado no menu "Consulta") esteja marcado e execute sua consulta normalmente .



Se você estiver tentando obter o plano de execução para instruções em um procedimento armazenado, deverá executar o procedimento armazenado, assim:
exec p_Example 42

Quando sua consulta for concluída, você deverá ver uma guia extra intitulada "Plano de execução" no painel de resultados. Se você executou muitas instruções, poderá ver muitos planos exibidos nesta guia.



A partir daqui, você pode inspecionar o plano de execução no SQL Server Management Studio ou clicar com o botão direito do mouse no plano e selecionar "Salvar plano de execução como ..." para salvar o plano em um arquivo no formato XML.

Método 2 - Usando as opções SHOWPLAN


Esse método é muito semelhante ao método 1 (na verdade, isso é o que o SQL Server Management Studio faz internamente), no entanto, eu o incluí para completar ou se você não tiver o SQL Server Management Studio disponível.

Antes de executar sua consulta, execute um das seguintes afirmações. A instrução deve ser a única instrução no lote, ou seja, você não pode executar outra instrução ao mesmo tempo:
SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

Essas são opções de conexão e, portanto, você só precisa executá-las uma vez por conexão. A partir deste ponto, todas as instruções executadas serão acompanhadas por um conjunto de resultados adicional contendo seu plano de execução no formato desejado - simplesmente execute sua consulta como faria normalmente para ver o plano.

Quando terminar, você pode desativar essa opção com a seguinte declaração:
SET <<option>> OFF

Comparação de formatos de plano de execução


A menos que você tenha uma forte preferência, minha recomendação é usar o STATISTICS XML opção. Essa opção é equivalente à opção "Incluir Plano de Execução Real" no SQL Server Management Studio e fornece a maioria das informações no formato mais conveniente.
  • SHOWPLAN_TEXT - Exibe um plano de execução estimado baseado em texto básico, sem executar a consulta
  • SHOWPLAN_ALL - Exibe um plano de execução estimado baseado em texto com estimativas de custo, sem executar a consulta
  • SHOWPLAN_XML - Exibe um plano de execução estimado baseado em XML com estimativas de custo, sem executar a consulta. Isso é equivalente à opção "Exibir plano de execução estimado..." no SQL Server Management Studio.
  • STATISTICS PROFILE - Executa a consulta e exibe um plano de execução real baseado em texto.
  • STATISTICS XML - Executa a consulta e exibe um plano de execução real baseado em XML. Isso é equivalente à opção "Incluir Plano de Execução Real" no SQL Server Management Studio.

Método 3 - Usando o SQL Server Profiler


Se você não puder executar sua consulta diretamente (ou sua consulta não for executada lentamente ao executá-la diretamente - lembre-se de que queremos um plano da consulta com desempenho ruim), você poderá capturar um plano usando um rastreamento do SQL Server Profiler. A ideia é executar sua consulta enquanto um rastreamento que está capturando um dos eventos "Showplan" está sendo executado.

Observe que, dependendo da carga, você pode use este método em um ambiente de produção, mas obviamente você deve ter cuidado. Os mecanismos de criação de perfil do SQL Server são projetados para minimizar o impacto no banco de dados, mas isso não significa que não haverá nenhum impacto no desempenho. Você também pode ter problemas para filtrar e identificar o plano correto em seu rastreamento se seu banco de dados estiver sob uso intenso. Obviamente, você deve verificar com seu DBA para ver se eles estão felizes com você fazendo isso em seu precioso banco de dados!
  1. Abra o SQL Server Profiler e crie um novo rastreamento conectando-se ao banco de dados desejado no qual você deseja registrar o rastreamento.
  2. Na guia "Seleção de eventos", marque "Mostrar todos os eventos", marque a linha "Desempenho" -> "Showplan XML" e execute o rastreamento.
  3. Enquanto o rastreamento está sendo executado, faça o que for necessário para que a consulta de execução lenta seja executada.
  4. Aguarde a conclusão da consulta e interrompa o rastreamento.
  5. Para salvar o rastreamento, clique com o botão direito do mouse no xml do plano no SQL Server Profiler e selecione "Extrair dados do evento..." para salvar o plano em arquivo no formato XML.

O plano que você obtém é equivalente à opção "Incluir Plano de Execução Real" no SQL Server Management Studio.

Método 4 - Inspecionando o cache de consulta


Se você não puder executar sua consulta diretamente e também não puder capturar um rastreamento do criador de perfil, ainda poderá obter um plano estimado inspecionando o cache do plano de consulta SQL.

Inspecionamos o cache do plano consultando DMVs do SQL Server. A seguir está uma consulta básica que listará todos os planos de consulta em cache (como xml) junto com seu texto SQL. Na maioria dos bancos de dados, você também precisará adicionar cláusulas de filtragem adicionais para filtrar os resultados apenas para os planos em que está interessado.
SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

Execute esta consulta e clique no plano XML para abrir o plano em uma nova janela - clique com o botão direito e selecione "Salvar plano de execução como..." para salvar o plano em arquivo no formato XML.

Observações:


Como há muitos fatores envolvidos (desde a tabela e o esquema de índice até os dados armazenados e as estatísticas da tabela), você deve sempre tente obter um plano de execução do banco de dados de seu interesse (normalmente aquele que está com problema de desempenho).

Você não pode capturar um plano de execução para procedimentos armazenados criptografados.

planos de execução "reais" versus "estimados"


Um real plano de execução é aquele em que o SQL Server realmente executa a consulta, enquanto um plano estimado plano de execução SQL Server funciona como deveria fazer sem executar a consulta. Embora logicamente equivalente, um plano de execução real é muito mais útil, pois contém detalhes e estatísticas adicionais sobre o que realmente aconteceu ao executar a consulta. Isso é essencial ao diagnosticar problemas em que as estimativas do SQL Server estão desativadas (como quando as estatísticas estão desatualizadas).
  • Plano de execução estimado e real revisado

Como interpreto um plano de execução de consulta?


Este é um tópico digno o suficiente para um livro (gratuito) por si só.

Veja também:

  • Noções básicas do plano de execução
  • Permissão SHOWPLAN e Lotes Transact-SQL
  • SQL Server 2008 – Usando hashes de consulta e hashes de plano de consulta
  • Analisando o cache do plano do SQL Server