Saltar para o conteúdo principal
Experimenta antes de pagar — a tua primeira aula é GRÁTIS!
Goalbi Academy

Planos de Execução no SQL Server: O Que um Iniciante Precisa de Entender

Um execution plan é a estratégia escolhida pelo SQL Server para executar uma query. Não é preciso decorar todos os operadores; é preciso compreender o fluxo, as estimativas e onde o trabalho se torna caro.

Por Goalbi Academy

Publicado em 4 min de leitura

Profissional de bases de dados a analisar um fluxo semelhante a um plano de execução num monitor grande.

Quando SQL Server recebe uma query, não lê simplesmente o texto de cima para baixo e executa cada cláusula nessa ordem. O query optimizer avalia estratégias possíveis e escolhe um execution plan. Esse plano descreve como o Database Engine pretende aceder aos dados, juntar objetos, ordenar linhas e produzir o resultado.

Plano estimado vs plano real

Um estimated plan mostra a estratégia escolhida sem executar a query. Um actual plan inclui informação de runtime recolhida durante a execução. O plano real é especialmente útil porque permite comparar o que o SQL Server estimou com o que realmente aconteceu.

Lê o plano como fluxo de trabalho

Planos gráficos contêm operadores ligados por setas. O mais importante é acompanhar como as linhas passam pelos operadores, em vez de olhar apenas para uma percentagem de custo.

Operadores comuns

  • Index Seek: utiliza um índice para localizar linhas qualificadas.
  • Index Scan ou Table Scan: lê uma porção maior do índice ou tabela.
  • Key Lookup: procura colunas adicionais depois de localizar linhas por outro índice.
  • Nested Loops: repete probes entre os inputs.
  • Hash Match: comum em joins e aggregates com conjuntos maiores.
  • Merge Join: junta inputs ordenados quando apropriado.
  • Sort: ordena linhas e pode precisar de memória significativa.
  • Spool: guarda resultados intermédios para possível reutilização.

Nenhum operador é automaticamente bom ou mau. Um scan numa tabela pequena pode ser perfeito. Um seek que devolve quase toda uma tabela grande pode continuar caro.

Estimated rows vs actual rows

Uma comparação muito útil é entre linhas estimadas e linhas reais. Diferenças grandes podem indicar informação inadequada sobre distribuição dos dados, parâmetros ou predicates. Estimativas erradas influenciam joins, memory grants e access methods.

Profissional de bases de dados a apontar para um diagrama de plano de execução.

Estatísticas são importantes

Statistics descrevem a distribuição dos dados e ajudam o optimizer a estimar quantas linhas cada operação vai produzir. Estatísticas desatualizadas ou pouco representativas podem gerar estimativas fracas. O artigo complementar sobre o percurso para se tornar DBA de SQL Server desenvolve este tema.

Índices importam, mas sugestões não são ordens

O plano pode sugerir um índice. Isso é evidência, não uma instrução automática. Antes de criar, considera índices existentes, custo de escrita, storage, manutenção e importância real da query.

Warnings merecem atenção

Planos podem mostrar spills para tempdb, implicit conversions e outros avisos. Eles merecem investigação, mas não provam sozinhos que aquela query é a causa principal de um problema global.

Memory grants e spills

Sorts e hashes podem pedir memória. Se o grant for pequeno, o trabalho pode derramar para tempdb; se for demasiado grande, outras queries podem esperar. O workload real é que determina o impacto. Explore bloqueios e deadlocks no SQL Server para aprofundar este ponto.

Parameter sensitivity

Um plano compilado para um valor pode funcionar mal para outro. Quando os dados são muito desiguais, um plano excelente para um valor raro pode ser fraco para um valor comum. Query Store ajuda a observar regressões e planos diferentes.

Formador a ensinar adultos com um diagrama de plano de execução no ecrã.

Não faças tuning apenas pelo plano

Combina o plano com duração, CPU, logical reads, waits, blocking, frequência e importância para o negócio. Para uma explicação específica, consulte como diagnosticar um SQL Server lento.

Workflow inicial

  1. Captura o actual plan num ambiente seguro.
  2. Identifica access e join operators.
  3. Compara estimated e actual rows.
  4. Procura scans, lookups, sorts, spills e warnings.
  5. Revê índices e statistics.
  6. Compara logical reads e duração antes/depois.
  7. Usa Query Store se o problema for regressão.

O que evitar

  • Afinar apenas o operador com maior custo estimado.
  • Criar todos os missing indexes sugeridos.
  • Assumir que scan é sempre mau e seek sempre bom.
  • Ignorar actual row counts.
  • Usar hints sem compreender a escolha do optimizer.
  • Comparar planos sem medir runtime.

Formação relacionada

SQL Server Performance Tuning & Troubleshooting aprofunda planos, cardinalidade, parameter sensitivity, Query Store, índices, estatísticas e tuning controlado.

Ver o curso de Performance Tuning

Precisa de ajuda para escolher o curso certo?

Se não tiver a certeza por onde começar, contacte a Goalbi Academy e diga-nos qual é o seu nível atual e o que pretende aprender.

Contactar a Goalbi Academy

Referências

Display and save Execution Plans - SQL Server

Monitor Performance by Using the Query Store - SQL Server

Troubleshoot Slow-Running Queries in SQL Server - SQL Server

Sobre a autoria

Goalbi Academy

Autor institucional

A Goalbi Academy oferece formação prática em tecnologia por meio de ensino orientado por instrutores e recursos educativos.

Todos os artigos
Todos os artigos
  • Engenheiro de bases de dados a analisar um problema complexo em vários monitores.

    Desempenho de SQL Server

    Blocking vs Deadlocks no SQL Server: Qual é a Diferença?

    Blocking e deadlocks envolvem sessões à espera de locks, mas não são o mesmo problema. Blocking pode ser normal e temporário; deadlock é um ciclo que o SQL Server precisa interromper escolhendo uma vítima.

    4 min de leitura

  • Profissional de informática a investigar desempenho de base de dados num posto com vários monitores.

    Desempenho de SQL Server

    Como Investigar um SQL Server Lento: Por Onde Começar

    Quando alguém diz 'SQL Server está lento', a frase é demasiado ampla para resolver o problema. Primeiro é preciso definir o sintoma, perceber o que mudou e recolher evidências antes de alterar configurações.

    5 min de leitura

Disponível