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
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.
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.
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
- Captura o actual plan num ambiente seguro.
- Identifica access e join operators.
- Compara estimated e actual rows.
- Procura scans, lookups, sorts, spills e warnings.
- Revê índices e statistics.
- Compara logical reads e duração antes/depois.
- 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.
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.
Artigos relacionados
Todos os artigosDesempenho 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
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
Azure SQL
Azure SQL Database vs Managed Instance vs SQL Server numa VM do Azure
As três opções podem executar workloads SQL no Azure, mas oferecem níveis diferentes de gestão da plataforma, compatibilidade SQL Server e responsabilidade de infraestrutura.
4 min de leitura