É importante verificar a fragmentação de um indice, pois isso pode indicar tanto problema na manutenção em Geral dos Bancos de Dados como problemas de Design dos Índices .
Podemos ter problemas diretos e indiretos relacionados a fragmentação de um indice.
Problemas Diretos
- Aumento de leituras, sobrecarregando os discos
Quando um indice esta fragmentado é como se tivessemos um livro onde após a página 89 você passa a ter a página 90, assim se você quer copiar da pagina 85 a 95 você terá o trabalho extra de localizar as páginas que estão fora de ordem. - Ordem de colunas incorreta ou FillFactor incorreto
Normalmente deve ser criado indices colocando primeiro colunas que tem mais valores distintos, mas as vezes essa organização não satisfaz bem determinada consulta “então precisamos analisar caso a caso”.
Campos que possuem campos como chave que são frequentemente alterados , devem utilizar um fillfactor entre 70 e 90, pois quando um registro é alterado para “continuar na mesma pagina” ele deve ter espaço para isso , se a pagina esta totalmente preenchida o registro acaba sendo colocado em outra pagina ocasionando assim a fragmentação.
Problemas Indiretos
- Estatisticas Desatualizadas
Se o indice estão fragmentados provavelmente as estatisticas não sejam atualizadas também, pois normalmente a estatistica de um indice é atualizada automaticamente quando o SQL Server esta habilitado “mas quase nenhum DBA confia nisso … neu eu =)” , outras possibilidades é atualizando diretamente a estatistica ou com Rebuild do indice “lembre-se que reorganzine não atualiza a estatistica”. - Plano de Execução de Consultas Inconsistente
Com indices fragmentados e estatisticas desatualizadas provavelmente o SQL Server não consiga gerar um plano de execução adequado para uma consulta. Isso além de gerar problema de consultas irá gerar mais IO, CPU e Memória, pois o Servidor precisara de mais recursos por não estar utilizando o melhor caminho de execução.
Com todos esses problemas que podem ser ocasionados, podemos ter um Cenário que aparentemente o Servidor necessite de mais memória, processador e CPU , mas na verdade o mesmo está com esse sintoma por estar realizando mais trabalho que ele realmente precisa fazer.
Por isso é importante analisar todos os pontos antes de decidir que decisão tomar pra solucionar um problema.
Identificando Fragmentação: http://blog.sqlauthority.com/2010/01/12/sql-server-fragmentation-detect-fragmentation-and-eliminate-fragmentation/