Performance Tuning #3

Fala pessoal, hoje vou tratar sobre o plano de execução de uma query no SQL Server.


Nos posts anteriores vimos que o tuning são ações que o DBA executa para garantir o desempenho do ambiente (#1) e que para isso ele usa algumas ferramentas para coletar as informações necessárias para esse trabalho(#2).


Chegamos agora ao plano de execução, ele é o responsável por desenhar o melhor caminho para chegar nos dados desejados. O mecanismo do banco usa um componente chamado 'otimizador de consultas' para identificar qual o melhor caminho, ele verifica a estrutura das tabelas, volumes de dados que serão retornados, estatísticas, índices e no final entrega o que chamamos de plano de consulta ou simplesmente plano de execução.


Ele é responsável por definir, por exemplo:

- A ordem em que as tabelas serão acessadas;

- O melhor método para extrair dados (usar um índice ou executar um scan na tabela);

- Métodos para filtrar, agregar e até classificar dados.


Existem dois tipos de planos de execução: Estimado e Real.

Um plano estimado não chega a executar a query para traçar o melhor caminho para chegar nos dados, ele conta com informações de estatísticas e de índices para montar um plano que possivelmente será usado para retornar os dados. É através desse plano estimado que o otimizador de consultas informa quanto recurso será necessário para executar a query. Se uma estatística retorna para o otimizador que serão retornadas 10 mil linhas, ele reserva uma determinada quantidade de memória (por exemplo) para essa execução, caso a informação esteja muito desatualizada e ao invés de 10 mil linhas são retornadas 70 mil linhas, aquela quantidade de memória não será suficiente e isso poderá causar problemas de desempenho (podendo levar o processo para o tempdb - memory spill). Por isso é extremamente importante ter uma rotina de manutenção preventiva eficaz e frequente, para que o otimizador possa contar sempre com estatísticas bem próximas da realidade e estimar da forma correta.


Você pode gerar o plano de execução estimado selecionando a query desejada e pressionando ctrl + L, ou utilizando o botão de atalho.


CTRL + L

Atalho


Já o plano real, como o próprio nome já diz, é o caminho real que de fato o SQL percorreu para chegar nos dados. Para gerar esse plano a query precisa ser executada no banco. Para habilitar o real você pode pressionar ctrl + M ou utilizar o botão de atalho (ele só será gerado após você habilitar ele e na sequência executar a query)


A visualização passa a ser em uma aba nova chamada 'Plano de execução'

Botão de atalho


Em algumas situações a mesma query pode apresentar planos diferentes entre o estimado e real (isso fica mais evidente quando esta ocorrendo gargalo de algum recurso como memória, por exemplo).


Geralmente o real é usado para selects e quando é alguma manipulação de dados como update e delete utiliza-se o estimado porque não executa o comando no banco.

O otimizador de consultas cria um plano de execução no formato de árvore contendo operadores baseada em custos.

Para cada etapa do processo ele escolhe qual operador terá o menor custo para aquela ação e assim até o final do processo. Existem os operadores lógicos e os físicos, o que vemos no plano de execução são os lógicos e para cada um deles existem por trás 1 ou mais operadores físicos sendo executados.


Existem dezenas de operadores, saber ler e interpretar cada um deles é parte fundamental para poder otimizar uma query, entender o que o SQL esta fazendo para podermos ajudá-lo a refinar esse caminho usando outro operador por exemplo.

Alguns dos operadores comuns que merecem atenção são o sort (que é responsável por ordenar os registros), key lookup (que é uma etapa a mais que o plano precisa executar para recuperar dados em que um índice não esta cobrindo por completo), table scan (leitura completa da tabela), Clustered Index Scan e index scan (leitura de todas as linhas de um índice clustered e um nonclustered).


Nesse link da documentação da Microsoft você pode ver a lista completa dos operadores de um plano de execução.

https://docs.microsoft.com/pt-br/sql/relational-databases/showplan-logical-and-physical-operators-reference?view=sql-server-ver15


Dicas de análise de um plano de execução

1) O plano deve ser avaliado da direita para a esquerda e de cima para baixo


2) O tamanho da linha demonstra o volume de dados, quando mais grossa significa que mais dados estão passando por ali

3) O custo é representado em %

4) Ao passar o mouse sobre o operador ele informa dados relevantes para a análise


Entendendo como analisar o plano de execução chegou a hora de realizar o tuning na query, e é o que faremos no próximo post dessa série.


Nos acompanhe em nossas redes sociais!

Youtube(vídeos novos todas as quartas): https://www.youtube.com/channel/UChFeqc-m7HZNdkoP0CshMGQ

Face & Instagram(conteúdo diário): dba on boarding

Até a próxima, tchau!

#CG_Performance

56 visualizações0 comentário

Posts recentes

Ver tudo