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

Plano de execução do SQL Server — o que é e como ele ajuda com problemas de desempenho?




Um plano de execução do SQL Server é útil para investigar problemas de desempenho com suas consultas. Os profissionais de banco de dados geralmente recebem tíquetes de problemas ou reclamações de usuários de que as consultas estão sendo executadas lentamente. Os resultados da consulta que costumavam levar dois ou três minutos de repente exigem mais de 30 minutos. A solução de problemas pode exigir a investigação de áreas como recursos do servidor (CPU, memória), estatísticas, desempenho do disco, bloqueio, impasses e índices. Neste artigo, vamos nos concentrar no papel do plano de execução do SQL Server na solução de problemas de desempenho.

O que acontece quando você envia o T-SQL no SQL Server?


Vejamos o que acontece quando você envia uma consulta usando Transact-SQL ou T-SQL no SQL Server. Para os usuários, é claro, não faz diferença. Os usuários esperam obter resultados precisos rapidamente, seja consultando o banco de dados ou pesquisando na web.

O fluxo de trabalho de alto nível de uma consulta SQL



  1. O usuário se autentica no SQL Server em um aplicativo cliente e envia uma consulta.
  2. O SQL Server analisa a consulta e verifica se há erros de sintaxe.
  3. A árvore de análise é processada posteriormente no Algebrizer, que resolve todos os objetos, tabelas e colunas na consulta. Ele também executa uma verificação nos tipos de dados da coluna. Em caso de problemas, ele retorna um erro. O Algebrizer gera uma árvore de processo de consulta e um hash de consulta. Se o plano de execução já existir, o SQL Server usa esse plano armazenado em cache e executa a consulta.
  4. Se não houver nenhum plano ou se o plano for obsoleto, o Otimizador de consultas realiza uma otimização completa baseada em custos com a ajuda de estatísticas, árvore de processo de consulta e restrições. Com base nessas entradas, ele prepara o plano de execução do SQL Server com custo otimizado.
  5. Por fim, o mecanismo de consulta do SQL Server executa a consulta de acordo com o plano de execução e retorna os resultados.

Visão geral de um plano de execução do SQL Server


Um plano de execução do SQL Server ajuda os profissionais de banco de dados a solucionar problemas de desempenho de consulta e escrever consultas eficientes. Quando uma consulta demora muito para ser executada, o plano de execução do SQL Server pode ajudá-lo a identificar o ponto em que a consulta está consumindo mais recursos e tempo.

Você pode usar qualquer um dos seguintes para gerar um plano de execução:
  1. SQL Server Management Studio
  2. Azure Data Studio
  3. Perfil do SQL Server
  4. Eventos estendidos
  5. Visualizações de gerenciamento dinâmico
  6. Software de monitoramento de banco de dados de terceiros

Os planos de execução gerados de #1 a #5 são semelhantes. O software de monitoramento de banco de dados de terceiros (nº 6) fornece funções adicionais que usam codificação de cores para identificar operadores dispendiosos.

O SQL Server fornece planos de execução estimados e reais, semelhantes ao que você experimenta quando precisa consertar seu carro. Um mecânico inspeciona seu veículo, então você recebe uma estimativa do trabalho com base em seus requisitos, a condição do veículo e o tempo aproximado e os materiais que o mecânico acha que o reparo levará. É claro que o custo e o tempo reais podem diferir, como acontece com os planos de execução estimados e reais do SQL Server.

Planos de execução estimados

Sem executar a consulta, você pode obter um plano de execução estimado (lógico) do SQL Server com base nas estatísticas do SQL Server. No SQL Server Management Studio (SSMS), siga estas etapas:
  1. Destaque a consulta (caso você queira o plano de execução para uma consulta específica).
  2. Clique no botão Exibir plano de execução estimado (atalho de teclado Ctrl + L), conforme mostrado abaixo.



Às vezes, o SQL Server não consegue produzir um plano estimado; por exemplo, se um parâmetro for usado sem especificar seu valor na consulta ou se uma tabela temporária não for declarada.

Plano de execução real

Depois de enviar a consulta ao SQL Server, você pode obter um plano de execução real representando as etapas que o SQL Server executou para executar a consulta. Como no cenário de reparo do veículo, isso é como a fatura real que você recebe.

Para obter o plano de execução real, siga as etapas abaixo no SSMS antes de executar a consulta.
  1. Destaque a consulta.
  2. Clique em Exibir plano de execução real botão (atalho de teclado Ctrl + M ), conforme mostrado acima.

Formatos de plano de execução do SQL Server


Por padrão, os procedimentos do SSMS explicados acima geram um plano de execução do SQL Server em formato gráfico. Mas você tem a opção de visualizar os planos de execução em três formatos diferentes:
  1. Gráfico
  2. XML
  3. Texto

Vejamos cada um desses formatos.

1. Plano de execução gráfica


O plano gráfico descreve todos os componentes, incluindo o fluxo de dados, conforme mostrado abaixo.



Operadores

Os operadores são exibidos como ícones. Cada operador é designado para realizar uma tarefa específica. Por exemplo, o otimizador de consulta no SQL Server pode executar uma verificação de tabela, uma verificação de índice e uma busca. É assim que um operador de busca de índice clusterizado se parece ao extrair dados de um índice na tabela [AdventureWorks2019].[HumanResources]:



Custo percentual

O plano gráfico também mostra um custo percentual — aqui, 99% para a busca de índice clusterizado — associado ao operador. Esse custo é relativo aos outros operadores usados ​​na execução da consulta.

Setas de fluxo de dados

As setas conectam os operadores, sua largura refletindo o número de linhas de dados que se movem de um operador para o próximo.

Por exemplo, suponha que sua consulta gere apenas uma única linha de saída, mas demore muito para ser concluída. Movendo o mouse para a seta de fluxo de dados no plano de execução, você descobre que o número de linhas lidas está na casa dos milhões. Isso representa um enorme desequilíbrio na utilização de recursos e revela uma área que precisa de otimização.

Dicas de ferramenta

Conforme mostrado abaixo, quando você passa o mouse sobre um operador, as dicas de ferramentas aparecem com mais estatísticas sobre o fluxo de dados.



Janela de propriedades

A janela Propriedades exibe informações detalhadas sobre os operadores e seus componentes. Este é um superconjunto das dicas de ferramentas.


2. Plano de execução do SQL Server formatado em XML


O plano de execução XML está em um formato específico e estruturado. Embora o formato XML seja menos intuitivo visualmente, ele contém todos os detalhes em XML e não requer etapas adicionais para exibir propriedades e dicas de ferramentas. Você pode facilmente converter o formato XML para o formato gráfico e vice-versa.

Para converter um plano de execução gráfico em formato XML, clique com o botão direito do mouse nele e escolha Mostrar XML do plano de execução , como mostrado abaixo.



O resultado é o seguinte plano de execução estruturado e formatado em XML.



Os comandos a seguir também geram o plano de execução no formato XML:
  • Para o plano estimado:SET SHOWPLAN_XML ON
  • Para o plano real: SET STATISTICS_XML ON

3. Plano de execução do SQL Server formatado em texto


Você pode gerar o plano de execução de várias maneiras:
  • DEFINIR SHOWPLAN_TEXT ON

Este comando gera o valor estimado plano de execução, sem informações detalhadas sobre a execução da consulta. Ele é destinado a aplicativos como o utilitário sqlcmd.


  • SET SHOWPLAN_ALL ON

Este comando gera o valor estimado plano de execução, com informações detalhadas sobre todos os operadores e operações em formato tabular.


  • DEFINIR PERFIL DE ESTATÍSTICAS

Este comando gera um plano de execução real, após a execução da consulta, em formato tabular.


Por que os planos de execução estimados e reais do SQL Server são diferentes?


Os planos de execução estimados e reais são geralmente semelhantes, embora algumas circunstâncias possam fazer com que sejam diferentes.

Estatísticas obsoletas


A principal razão para as diferenças entre os planos de execução estimados e reais são as estatísticas obsoletas.

O otimizador de consulta usa estatísticas para criar um plano de execução de consulta otimizado e econômico. Se suas estatísticas não forem atualizadas ou se sua amostragem de dados não for adequada, o otimizador de consultas realizará uma otimização completa e criará um plano de execução com base em informações antigas. Você também pode obter um plano de execução ineficiente que pode levar a problemas de desempenho de consulta.

Estatísticas obsoletas às vezes ocorrem quando os dados mudam com frequência e as estatísticas não são atualizadas de acordo com a manutenção do índice.

Plano de execução do SQL Server serial ou paralelo


Em tempo de compilação, o otimizador de consulta cria um plano de execução e produz um plano serial ou paralelo, dependendo do custo da consulta e do limite de custo do paralelismo. Embora o plano de execução possa ser o mesmo para os modos serial e paralelo, o SQL Server decide entre eles com base nos recursos e na atividade do servidor.

Estimativas inválidas


Conforme mencionado anteriormente, o Algebrizer vincula os nomes dos objetos antes de executar a consulta SQL. Suponha que você especifique que uma tabela chamada teste será criada no tempo de execução e tente gerar um plano de execução estimado. Como essa tabela não existe, você receberá uma mensagem de erro, conforme mostrado abaixo.


Usando o plano de execução


Em resumo, você pode gerar um plano de execução do SQL Server nos formatos gráfico, XML e texto e usá-lo para ajudar a resolver seus problemas de desempenho do banco de dados.

Os planos de execução de consulta são as etapas principais na identificação do fluxo de trabalho, operadores e componentes de consulta para que você possa ajustar suas consultas para qualquer melhoria possível. Para obter mais informações sobre como usar planos de execução, confira nossa postagem: Como ler e analisar planos de execução.