Quando devo reconstruir os índices em meu banco de dados relacional (SQL Server)?
Existe um caso para reconstruir índices regularmente?
Quando devo reconstruir os índices em meu banco de dados relacional (SQL Server)?
Existe um caso para reconstruir índices regularmente?
Correndo o risco de ser muito geral em minha resposta, direi que você deve executar um processo de manutenção de índice regularmente. No entanto, seu processo de manutenção de índice deve apenas reconstruir/reorganizar os índices que o exigem especificamente.
Isso apresenta a questão: quando um índice precisa ser reconstruído ou reorganizado? Rolando tocou bem nisso. Mais uma vez, corro o risco de ser extremamente amplo. Um índice requer manutenção quando o nível de fragmentação afeta negativamente o desempenho. Esse nível de fragmentação pode variar com base no tamanho e na composição do índice.
Falando em SQL Server, costumo escolher um tamanho de índice e um nível de fragmentação de índice no qual começo a realizar a manutenção do índice. Se um índice contiver menos de 100 páginas, não farei manutenção.
Se um índice estiver entre 10% e 30% fragmentado, vou fazer
REORGANIZE
o índice eUPDATE
as estatísticas. Se um índice estiver mais de 30% fragmentado, eu ireiREBUILD
o índice - semUPDATE STATISTICS
, pois isso é cuidado peloREBUILD
. Lembre-se, porém, de que uma reconstrução atualiza apenas o objeto de estatísticas diretamente associado ao índice. Outras estatísticas de coluna precisarão ser mantidas separadamente.Esta resposta é realmente apenas um longo caminho para dizer: Sim, você deve fazer manutenção de índice de rotina, mas apenas nos índices que precisam dela.
Você deve reconstruir os índices quando eles se tornarem altamente fragmentados por eventos especiais. Por exemplo, você executa um grande carregamento em massa de dados em uma tabela indexada.
E daí que seus índices estão se fragmentando regularmente devido à atividade regular? Você deve agendar reconstruções regulares? Com que frequência eles devem correr?
Tom Kyte , neste tópico clássico do Ask Tom , recomenda:
A lógica aqui é boa, mas é tendenciosa contra um perfil de carga pesada de leitura.
Um índice "gordo" (ou seja, um com muitas lacunas) de fato mantém uma boa quantidade de espaço para linhas novas e movidas, reduzindo assim as divisões de página e mantendo suas gravações rápidas. No entanto, quando você lê esse índice gordo, terá que ler mais páginas para obter os mesmos dados, porque agora está vasculhando mais espaço vazio. Isso atrasa suas leituras.
Portanto, em bancos de dados de leitura intensa, você deseja reconstruir ou reorganizar regularmente seus índices. (Com que frequência e sob quais condições? Matt M já tem uma resposta concreta para essa pergunta.) Em bancos de dados que experimentam atividade de leitura e gravação aproximadamente equivalente, ou em bancos de dados com muita gravação, você provavelmente está prejudicando o desempenho do banco de dados ao reconstruir índices regularmente.
A maioria das pessoas os reconstrói regularmente para que nunca fiquem fragmentados. Quando você precisa reconstruí-los é baseado na rapidez com que eles são fragmentados. Alguns índices precisarão ser reconstruídos com frequência, outros basicamente nunca. Confira o script que o SQLFool montou que lida com muitas coisas para você.
Conforme observado na resposta aceita de Matt M, uma regra prática comum é que os índices com mais de 30% de fragmentação devem ser reconstruídos.
Esta consulta irá ajudá-lo a descobrir quantos índices você tem que estão mais de 30% fragmentados (quando você tem alguns, você deve reconstruí-los):
Quando a porcentagem de fragmentação do índice for superior a 30%.
Não existe esse caso, mas em geral, fazer a Manutenção do Índice uma vez por semana, no fim de semana, é a melhor prática para manter o ambiente estável.
Eu recomendaria usar scripts de manutenção de Ola Hallengren (melhores scripts de manutenção), personalizar os scripts com base no seu ambiente e agendá-los para serem executados no fim de semana.
https://ola.hallengren.com/
Nota: Não se esqueça de atualizar as estatísticas após reconstruir os índices, porque a reconstrução dos índices não atualiza todas as estatísticas.
Como a maioria das coisas em TI, depende. Qual problema você está tentando corrigir reconstruindo índices? Você pode mostrar que isso realmente resolve o problema? Nesse caso, ajuste os números até encontrar a menor quantidade de manutenção necessária para corrigir o problema.
Se isso não resolver o problema, ou o motivo pelo qual você está fazendo isso é apenas para apaziguar alguma métrica que você monitora porque pode melhorar as coisas, tudo o que você está fazendo é queimar CPU e E/S e possivelmente piorar seu problema.
Há um argumento de que corrigir a fragmentação não fará nenhuma diferença para o seu servidor, então vale a pena fazer isso regularmente?
https://www.brentozar.com/archive/2017/12/index-maintenance-madness/
http://brentozar.com/go/defrag