Automatic Tuning, Manutenção de Índices e MAXDOP

Aborda Automatic Tuning, manutenção de índices, MAXDOP e Intelligent Query Processing para automação de desempenho SQL.

O exame DP-300 avalia a capacidade de escolher a ferramenta certa no momento certo. Quando usar REBUILD em vez de REORGANIZE? Quando a atualização manual de estatísticas supera a automática? Em que nível exatamente configurar o MAXDOP? Essas escolhas parecem difíceis quando as opções soam razoáveis, mas entendendo por que cada recurso existe, cenários desconhecidos começam a se resolver naturalmente.

Fragmentação de Índices — Reorganizar uma Biblioteca vs Atualizar um Mapa

Imagine uma biblioteca em uso há décadas. Os livros estavam ordenados no início, mas devoluções e empréstimos abriram lacunas e eles perderam seus lugares. Agora o bibliotecário percorre vários corredores para encontrar um único título. Os índices de banco de dados sofrem o mesmo problema após repetidas operações INSERT, UPDATE e DELETE.

A fragmentação é medida com . Os limites da Microsoft dividem o tratamento em duas faixas. Entre 5% e 30%, usa-se — como atualizar anotações de localização sem mover livros. As páginas são reorganizadas no lugar e a operação sempre executa online. Acima de 30%, usa-se — esvaziar as prateleiras e reordenar tudo do zero. Por padrão executa offline com bloqueio de tabela, mas elimina o bloqueio.

A diferença decisiva: atualiza estatísticas com varredura completa automaticamente; não toca nas estatísticas. Para eliminar fragmentação e atualizar estatísticas em um passo, é a única opção.

 

Estatísticas e Planos de Execução — Um Mapa Desatualizado Leva ao Caminho Errado

Navegar com um GPS de três anos pode enviá-lo por estradas que já não existem. O otimizador de consultas corre o mesmo risco. As estatísticas são histogramas da distribuição dos dados em cada coluna, e quando ficam desatualizadas o otimizador escolhe planos incorretos.

fica ativada por padrão e dispara quando cerca de 20% das linhas mudam. Em tabelas com centenas de milhões de linhas isso representa dezenas de milhões de alterações, então na prática pode raramente ocorrer. força uma varredura de cada linha. move a atualização para o plano de fundo, permitindo que consultas seguintes se beneficiem sem esperar. atualiza apenas estatísticas alteradas desde a última atualização, sendo prático para manutenção agendada.

 

DBCC CHECKDB — Check-up Anual com Reparo de Alto Risco

Assim como um exame médico detecta problemas antes que se tornem emergências, verificações periódicas protegem o banco de dados contra corrupção silenciosa. inspeciona integridade de páginas, erros de alocação e violações de restrições. acelera o processo pulando índices não clusterizados; limita a inspeção à estrutura física das páginas.

Quando corrupção é detectada sem backup disponível, é o último recurso absoluto. O comando remove dados corrompidos para restaurar o acesso, mas as linhas removidas não podem ser recuperadas. No exame, significa "último recurso, perda permanente de dados."

 

Automatic Tuning — A Oficina que Trabalha Enquanto Você Dorme

Imagine máquinas de fábrica que detectam falhas à noite e restauram a configuração anterior antes do turno da manhã. O Automatic Tuning do Azure SQL Database faz exatamente isso para planos de consulta.

monitora o Query Store e detecta regressões de plano. Se uma consulta que levava 0,1 segundo ontem sobe para 10 segundos hoje, o Automatic Tuning força o último plano bom sem intervenção humana. Esse recurso é ativado por padrão no Azure SQL Database; no SQL Managed Instance e SQL Server local, deve ser habilitado manualmente. As recomendações de CREATE INDEX e DROP INDEX são exclusivas do Azure SQL Database: se um índice recomendado prejudica o desempenho, o sistema reverte automaticamente.

 

MAXDOP e Resource Governor — Quantas Faixas Abrir

Mais faixas em uma rodovia nem sempre significam tráfego mais rápido — em cruzamentos complexos, faixas demais criam gargalos. MAXDOP (Max Degree of Parallelism) limita os núcleos de CPU que uma única consulta pode usar.

O MAXDOP tem três escopos. Instância: aplica-se a todos os bancos de dados no SQL Server ou SQL Managed Instance. Banco de dados: substitui a configuração da instância por banco. Consulta: aplica-se a uma única instrução. Cargas OLTP geralmente usam MAXDOP 1 a 4; cargas OLAP se beneficiam de valores mais altos.

Resource Governor — disponível no SQL Server e SQL Managed Instance, não no Azure SQL Database — divide conexões em grupos de carga de trabalho com limites de CPU e memória via Classifier Function, impedindo que consultas de relatórios prejudiquem a carga OLTP na mesma instância.

 

REBUILD vs REORGANIZE em Resumo

| Critério | REBUILD | REORGANIZE | |:--|:--|:--| | Limite de fragmentação | Acima de 30% | 5–30% | | Execução online | Requer ONLINE = ON | Sempre online | | Atualização de estatísticas | Varredura completa, automática | Nenhuma | | Impacto de bloqueios | Bloqueio de tabela offline | Mínimo |

Uma armadilha comum: a questão pode descrever "manutenção de índice online" soando como REORGANIZE, mas se a fragmentação supera 30%, a resposta é . REORGANIZE não tem opção ONLINE — é sempre online sem qualificador.

!REBUILD vs REORGANIZE

Intelligent Query Processing — Aprendendo no Trabalho

Um funcionário novo melhora após um mês porque a experiência ensina adaptação. O Intelligent Query Processing (IQP), introduzido no SQL Server 2017, aplica um ciclo de feedback semelhante à execução de consultas.

Adaptive Joins avaliam a contagem real de linhas em tempo de execução e alternam dinamicamente entre Hash Join e Nested Loop Join. Memory Grant Feedback registra a memória realmente usada e ajusta alocações futuras, convergindo consultas para a quantidade certa. Batch Mode on Rowstore traz processamento em lote para tabelas heap e B-tree comuns, acelerando consultas analíticas sem índice columnstore. Todos os recursos IQP ativam com compatibilidade de banco de dados nível 140 ou superior.

 

Resumo do Exame

"Fragmentação de índice 5–30%, deve permanecer online" -- REORGANIZE "Fragmentação de índice acima de 30%, estatísticas também precisam ser atualizadas" -- REBUILD "Evitar que REBUILD bloqueie a tabela" -- WITH (ONLINE = ON) "Forçar atualização de estatísticas com varredura completa" -- UPDATE STATISTICS WITH FULLSCAN "Atualizar estatísticas sem bloquear consultas" -- AUTO_UPDATE_STATISTICS_ASYNC ON "Detecção e recuperação automática de regressão de plano" -- FORCE_LAST_GOOD_PLAN "Recomendações automáticas de índices (somente Azure SQL Database)" -- Automatic Tuning CREATE/DROP INDEX "Verificação de integridade, reparo de último recurso" -- DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS "Limites de CPU e memória por carga de trabalho (somente MI/servidor local)" -- Resource Governor "Configuração de MAXDOP no escopo do banco de dados" -- ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP "Ajuste automático de alocação de memória por consulta" -- Memory Grant Feedback "Alternância dinâmica de tipo de junção em tempo de execução" -- Adaptive Joins

Automatic Tuning = recuperação automática de regressões (Azure SQL Database adiciona recomendações de índice), MAXDOP = limite de núcleos paralelos (três escopos), Resource Governor = isolamento de cargas de trabalho no MI e SQL Server

Voltar à lista do blog