Quando criamos um índice com fillfactor igual a 100, quer dizer que todos as páginas utilizadas pelo objeto estão completamente cheia. Conforme mostrado na figura abaixo:
Na figura os retângulos verdes estão representando as páginas do objeto, a seta preta informa a ordem lógica das informações e a seta vermelha a ordem em que as informações estão armazenadas. Esta figura é apenas simbólica para o entendimento sobre fragmentação, pois a estrutura usada no SQL Server é árvore B-Tree.
Existem duas formas que podem fazer o índice ficar fragmentado logicamente, ou seja, a ordem lógica das informações não ficam sequênciais como na figura. Uma maneira é acontecendo Page Split, que é um processo interno do SQL que ocorre quando ele realoca novos dados, quando não há espaços nas páginas para aloca-los ou quando altera o tamanho de um campo varchar por exemplo.
Segue figura exibindo um Page Split.
Pode-se ver que a ordem lógica representado pela seta preta não está mais sequencial, ou seja, está fragmentada.
A utilização normal do banco de dados, fazendo INSERT, UPDATE e DELETE também causa níveis elevados de fragmentação, como demonstrado na figura a seguir:
Pois é pessoal imagina o SQL buscando informações neste índice, a consulta seria extremamente lenta. Isso ocorre caso não seja realizada desfragmentações frequente no banco.
Para verificar o nível de fragmentação no SQL Server 2008 usa-se a DMV sys.dm_db_index_physical_stats, deve-se verificar os campos
avg_fragmentation_in_percent, As formas para realizar a desfragmentação no SQL são ALTER INDEX REBUILD, ALTER INDEX REORGANIZE ou WITH DROP_EXISTING.
Abraços,
Rodrigo Figueiredo
Nenhum comentário:
Postar um comentário