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

Como ler e analisar os planos de execução do SQL Server




Os planos de execução do SQL Server são um gateway para otimizador de consultas e execuções de consultas para profissionais de banco de dados. Eles revelam o processamento de consultas e as fases envolvidas, como tabelas afetadas, índices, estatísticas, tipos de junções, número de linhas afetadas, processamento de consultas, classificação e recuperação de dados.

Em um artigo anterior, Plano de execução do SQL Server — o que é e como ele ajuda com problemas de desempenho? exploramos o fluxo de trabalho de execução de consultas de alto nível, os diferentes tipos de planos de execução (gráficos, XML e texto), juntamente com planos de execução reais e estimados.

Agora, vamos explorar as coisas que você precisa saber ao avaliar os planos de execução do SQL Server e como melhor interpretar as informações.

Ler um plano gráfico de execução do SQL Server


Geralmente, lemos os planos de execução da direita para a esquerda. Você começa com o operador de plano de execução mais à direita e avança para a esquerda. Ele ajuda você a seguir o fluxo de dados lógicos na consulta.

Suponha que você execute a seguinte consulta em um banco de dados de amostra [AdventureWorks2019] e visualize o plano de execução real.
SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

A consulta recupera dados da tabela [Sales].[SalesOrderDetail] para pedidos com preço unitário superior a 1.000.



Se lermos o plano de execução da direita para a esquerda, observaremos o seguinte:
  • O primeiro operador é o Clustered Index Scan que lê dados da tabela [Sales].[SalesOrderDetail]. Quando você leva o ponteiro do mouse para a seta que conecta o operador Clustered Index Scan e Top , ele retorna o número estimado e real de linhas e o tamanho estimado dos dados.


  • Ele passa dados do operador Clustered Index Scan para o operador Top passa as 10 linhas para o operador SELECT.



Internamente, o SQL Server executa o plano da esquerda para a direita. Se estiver interessado nas ordens físicas do operador, deverá ler um plano de execução da esquerda para a direita. Cada operador solicita dados do próximo operador. Por exemplo, no cenário acima, o operador Top solicita dados do Clustered Index Scan. A Verificação de índice clusterizado retorna as linhas da tabela [Sales].[SalesOrderDetail] que atende a Where condição da cláusula.



No caso de várias ramificações se fundirem em um plano de execução, você deve seguir a abordagem da direita para a esquerda, de cima para baixo.


Custos do operador


Cada operador em um plano de execução do SQL Server está associado a um custo. O custo do operador é relativo a outros custos no plano de execução. Normalmente, precisamos nos concentrar no operador caro e ajustar a consulta em torno dele.



No caso de um plano de execução complicado, pode ser um desafio identificar o operador caro. Nesse caso, você pode usar SET SHOWPLAN_ALL ON, e fornecerá informações em formato tabular.



Você também pode usar o [Stmt text] para detalhar o plano de execução em cada operador e nível de instrução.



O SQL Server Management Studio (SSMS) também oferece flexibilidade para localizar um operador com base em critérios de pesquisa. Para fazer isso, clique com o botão direito do mouse no plano de execução e selecione Localizar nó. Isso abrirá uma janela com várias condições de pesquisa. Especifique seu requisito e ele apontará para o nó específico, conforme mostrado abaixo.



Como alternativa, você pode usar o Azure Data Studio e navegar até Executar consulta atual com plano real  na paleta Comando. Isso fornece um plano de execução real em um formato compacto, juntamente com as principais operações para identificar rapidamente os operadores caros.


Análise do plano de exibição


Você pode identificar uma estimativa de cardinalidade imprecisa para investigar planos de execução problemáticos. Isso fornecerá informações breves sobre como encontrar um operador específico e recomendações na guia Análise do ShowPlan. Você pode classificar o resultado nas colunas de diferença, real e estimada para encontrar o problema e recomendações para o operador específico no plano de execução. Isso está disponível no SSMS 17.4.

Para fazer isso, basta clicar com o botão direito do mouse no plano de execução e clicar em Analisar o plano de execução real.



Em seguida, clique no hiperlink em Encontrando detalhes . Isso explicará os possíveis cenários de imprecisão de estimativa e soluções alternativas para melhorar essas estimativas. É um bom ponto de partida para problemas de estimativa de cardinalidade.


Comparar plano de exibição


Suponha que você identificou um problema no plano de execução e implementou uma solução para corrigi-lo. Mas, como você vai comparar o plano de execução anterior (como era antes de implementar a solução) e o plano de execução atual? O plano de exibição de comparação de SSMS O recurso oferece a flexibilidade de comparar dois planos de execução. Ele destaca as semelhanças e diferenças entre esses planos.

Normalmente, os DBAs recebem uma ligação dos desenvolvedores informando que uma consulta específica está funcionando bem na produção, mas está demorando muito em um ambiente de controle de qualidade com os mesmos parâmetros. Outro caso de uso é migrar para uma versão mais recente do SQL Server. Suponha que, após a migração, você enfrente problemas com uma consulta que funciona bem em uma versão SQL inferior. Você também pode usar essa ferramenta para comparar planos de execução de diferentes versões do SQL e níveis de patch.

Salve o plano de execução em um SQLPlan extensão. Depois disso, você pode clicar com o botão direito do mouse em outro plano de execução e selecionar Compare Showplan .


Planos de execução ao vivo no SSMS


Você pode habilitar um plano de execução ao vivo de uma consulta ativa. Isso fornecerá estatísticas em tempo real sobre o fluxo de dados para diferentes operadores. Nas estatísticas de execução do tempo de execução, você pode acompanhar o tempo decorrido e o número de linhas. É um excelente recurso para solucionar problemas e depurar problemas de desempenho. Você pode usar estatísticas de consulta ao vivo do SQL Server 2016 e superior.

Observação:você deve usar a versão mais recente do SSMS. Consulte os documentos da Microsoft para fazer o download da versão mais recente do SSMS.
  • Versão mais recente:SSMS 18.7.1

Para estatísticas de consulta em tempo real, ative Incluir estatísticas de consulta em tempo real usando a barra de ferramentas do SSMS.



Você também pode ver o plano de execução ao vivo no Monitor de atividades . No Activity Monitor, selecione o processo desejado, clique com o botão direito nele para visualizar o menu e escolha Show Live Execution Plan.




Isso fornece estimativas de consulta ao vivo junto com o fluxo de dados e as porcentagens de conclusão de operadores individuais. Normalmente, esperamos a execução da consulta terminar e visualizamos o plano de execução real. Mas suponha que sua consulta demore mais de 30 minutos para produzir resultados. Nesse caso, você pode usar estatísticas de consulta ao vivo para rastrear operadores individuais, fluxo de dados e apontar qual operador está demorando para concluir a consulta. Por exemplo, conforme mostrado abaixo, a consulta está sendo executada por 12 minutos e 48 segundos, e a consulta é estimada em 20% concluída. No nível do operador, a varredura de índice e o spool de contagem de linhas estão 41% concluídos. As linhas pontilhadas mostram a movimentação dos dados.


Revisando o uso do plano de execução do SQL Server


Os planos de execução do SQL Server são incrivelmente úteis na solução de problemas e na otimização de consultas lentas. Todo profissional de banco de dados precisa saber analisar e entender as informações assim que o plano de execução estiver disponível. Conforme abordado anteriormente, existem várias ferramentas no SSMS e no Azure Data Studio para ajudá-lo a revisar e resolver problemas de desempenho - o recurso Comparar Plano especialmente é um para aproveitar à medida que você começa a fazer alterações e avaliar o desempenho.