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.
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
Comments