Nosso servidor SQL reside em uma SAN. Ele contém dezenas de bancos de dados OLTP, alguns com várias tabelas contendo mais de 1 milhão de registros.
Temos executado os scripts de manutenção de índice de Ola Hallengren semanalmente, e eles são executados por várias horas a cada vez. Com base no limite de fragmentação, o script reorganizará ou reindexará um índice. Observamos que durante a reindexação, os arquivos de log ficam enormes, o que leva a um consumo excessivo de largura de banda durante o envio de log.
Em seguida, vem um artigo de Brent Ozar no qual ele diz para parar de se preocupar com índices SQL :
Seus discos rígidos são compartilhados com outros servidores que também estão fazendo solicitações de unidade ao mesmo tempo, portanto, as unidades sempre estarão pulando por todo o lugar para obter dados. Desfragmentar seus índices é apenas um trabalho ocupado sem sentido.
Pesquisar essa questão no Google leva a opiniões variadas, a maioria apoiada em argumentos que parecem muito breves ou fracos. Nosso plano provisório é ajustar o limite de fragmentação em nosso script de manutenção para que ele se reorganize com muito mais frequência do que reindexe.
Qual é o veredicto final? Vale a pena desfragmentar índices SQL em uma SAN considerando os encargos associados à execução de trabalhos de manutenção semanais?
As estratégias de desfragmentação ajudam a melhorar a velocidade de varredura de/para o disco .
A grande variedade de opiniões ocorre porque a estratégia de desfragmentação ideal de um ambiente depende de muitos fatores diferentes. Existem também várias camadas potenciais de fragmentação em jogo.
Dizer que seus bancos de dados são armazenados em uma SAN não é informação suficiente. Por exemplo:
Os arquivos de banco de dados são armazenados em grupos de RAID físicos separados ou no mesmo grupo de RAID? Que outros processos estão ativos no mesmo dispositivo? Seus arquivos de backup estão acabando lá também? Você pode ter que pedir essas informações ao seu administrador de SAN, porque nem sempre é transparente.
Quais são os padrões de acesso aos bancos de dados? O OLTP geralmente é acesso aleatório, mas às vezes um aplicativo é compatível com a verificação de tabela e você não pode alterar seu comportamento (aplicativo ISV). Os aplicativos são principalmente de leitura, principalmente de gravação ou algo intermediário?
Há SLAs de desempenho em execução durante um período de recuperação/failover ?
A postagem de Brent assume que há um pool gigante de armazenamento e tudo o compartilha. Isso significa que os discos físicos raramente estão ociosos e, portanto, a maioria dos acessos é aleatório. Se essa for a sua situação, o conselho se aplica e concordo com ele em sua maior parte. Embora esse tipo de estratégia seja muito mais fácil de gerenciar, não é necessariamente (a) o que você tem em seu ambiente ou (b) qual é a melhor solução para seu ambiente.
Se a manutenção do índice for onerosa, considere fazê-la de forma menos agressiva e/ou amortize o custo ao longo da semana (ou seja, execute uma manutenção leve uma vez/dia, em vez de uma manutenção pesada uma vez/semana).
Você também pode ativar a
SortInTempdb
opção para reduzir potencialmente a quantidade de registro que ocorre nos bancos de dados do usuário.Idealmente, você deve reorganizar/reindexar APENAS os índices que precisam de atenção, caso contrário, estará desperdiçando recursos e possivelmente causando outros problemas.
Você precisa estabelecer uma linha de base de desempenho e, sempre que fizer alterações, comparar a mudança de desempenho com a linha de base para determinar se vale a pena implementar sua mudança.
Ok, a pergunta é sobre índices de banco de dados, que são uma construção de um arquivo ou conjunto de arquivos. A leitura das respostas acima levaria uma pessoa a acreditar que estamos falando de fragmentação no nível do disco e não dos índices dentro de um arquivo. Esses assuntos totalmente separados.
A abordagem míope aqui é o desempenho ao recuperar dados dentro e o banco de dados OLTP melhora se os índices forem desfragmentados ou reconstruídos. A resposta é sim! No entanto, é importante observar que a fragmentação do disco também é um fator.
Menor "custo" geral? Faça sua manutenção de banco de dados. Segundo menor custo, desconecte o banco de dados, mova-o para outro lugar, reformate seus discos e siga as práticas recomendadas para alinhamento de partição de disco http://msdn.microsoft.com/en-us/library/dd758814.aspx . Por último, mas não menos importante, use um desfragmentador avançado de terceiros como o Diskkeeper.
Lembre-se de que isso é recomendado APENAS para armazenamento do tipo NTFS (por exemplo, sistema operacional Windows) e não é um endosso para nenhum produto nem sou afiliado à Condusiv Technologies ou suas subsidiárias.