Por que o índice REBUILD não reduz a fragmentação do índice?

30

Eu usei o ALTER INDEX REBUILD para remover a fragmentação do índice. Em alguns casos, o REBUILD parece não remover essa fragmentação. Quais são as razões pelas quais o REBUILD não remove a fragmentação? Parece que isso acontece especialmente com pequenos índices.

jrara
fonte
Relacionados: dba.stackexchange.com/questions/5365/...
Mark Storey-Smith

Respostas:

39

Se um índice for muito pequeno (acredito que tenha menos de 8 páginas), ele usará extensões mistas. Portanto, parecerá que ainda existe uma fragmentação restante, pois a extensão da caixa conterá páginas de vários índices.

Por esse motivo, e também pelo fato de que em um índice tão pequeno que a fragmentação geralmente é insignificante, você realmente só deve recriar índices com um determinado limite de página. É uma prática recomendada recriar índices fragmentados com no mínimo 1000 páginas .

Thomas Stringer
fonte
34

Isso também pode acontecer com índices muito GRANDES.

Eu tinha alguns índices em uma tabela com cerca de 700m de linhas que não conseguiam desfragmentar abaixo de cerca de 30%. O problema não era espaço livre contíguo suficiente dentro do banco de dados para organizar o índice consecutivamente.

Para solucionar um índice muito grande que não desfragmentará, a solução BEST é pré-dimensionar um novo banco de dados e mover todos os seus objetos para esse banco de dados e recriar seus índices lá.

JNK
fonte
1

Eu luto com isso há algum tempo e, como o JNK, pensei que o problema era continuar com espaço livre e fragmentação física no disco. No entanto, o que você faz sobre isso em uma SAN SSD?

Descobri agora que pode ser uma boa ideia incluir apenas index_level = 0. É assim que é feito no roteiro de Ola Hallengren.

Outra melhoria é fazer

 REBUILD With (maxdop = 1)

Dessa forma, você garante a máxima melhoria.

vikjon0
fonte