Comportamento dos dados em índices com base no fator de preenchimento

14

Digamos que você tenha um banco de dados no qual o fator de preenchimento padrão seja 20. Sempre que dados são inseridos, ele cria apenas páginas preenchidas até 20%?

Pelo que entendi, quando os dados são inseridos, haverá aproximadamente 20% dos dados nas páginas. Quando os dados são atualizados, no entanto, eles se expandem para mais de 20% do índice, até preenchê-lo e gerar uma divisão de página, certo?

DForck42
fonte

Respostas:

16

O fator de preenchimento só entra em ação quando um índice é criado ou reconstruído. É a quantidade de consumo para o índice das páginas no nível da folha que são preenchidas durante essas operações. ( consulte a nota abaixo para obter mais esclarecimentos sobre os níveis de página afetados )

Quando existe um comando DML para dados ( INSERT, UPDATE, e / ou DELETE), ele irá acontecer com os índices afectadas correspondentes. Em outras palavras, se você tiver uma página preenchida em 20% e inserir dados nessa página, ela conterá mais de 20% dos dados (digamos 35% apenas por exemplo). Faça outra inserção, agora a página está 64% preenchida. Recrie o índice e as páginas no nível da folha agora conterão relativamente a porcentagem de espaço que você especificar (ou implicitamente o valor padrão para o servidor).

( Observe que , quando você não especifica PAD_INDEXser ON, o fator de preenchimento é aplicado apenas às páginas no nível da folha. Mas quando você define PAD_INDEX = ON, o fator de preenchimento será levado em consideração nas páginas de índice intermediário. O padrão éOFF )

O motivo para ajustar o fator de preenchimento (em vez de usar o 100/0 padrão) é para minimizar as divisões de página ao inserir ou atualizar dados. Mas lembre-se, nada é de graça. Quanto menor o fator de preenchimento, mais dados de espaço normalmente ocupariam. Se você mantiver um espaço de página livre de 80% para seus índices, eles consumirão uma quantidade relativamente maior de espaço em disco, o que pode levar a mais leituras.

Pelo que entendi, quando os dados são inseridos, haverá aproximadamente 20% dos dados nas páginas. Quando os dados são atualizados, no entanto, eles se expandem para mais de 20% do índice, até preenchê-lo e gerar uma divisão de página, certo?

Quando os dados são inseridos, eles serão inseridos nos índices apropriados na página apropriada. Isso poderia e muito provavelmente faria com que o consumo da página fosse maior que o fator de preenchimento.

Uma divisão de página ocorrerá quando novos dados forem adicionados a uma página de índice completa. O SQL Server dividirá a página e colocará aproximadamente metade dos dados da página inteira em uma nova página. Novamente, o fator de preenchimento não entra em jogo aqui.

Um motivo legítimo para diminuir o fator de preenchimento seria minimizar as divisões de página, minimizando a fragmentação da página de índice.

Thomas Stringer
fonte
3
Também minimiza as operações de E / S necessárias para aumentar ou alocar espaço.
23412 JNK
OK, então eu estava errado em como o comportamento funcionava. Obrigado por uma resposta tão detalhada!
DForck42
1
@ DForck42 Sem problemas, prazer em ajudar.
Thomas Stringer
Podemos resumir isso para dizer que a definição de um fator de preenchimento baixo tenderá a diminuir a leitura (mais páginas), mas a inserção rápida (menos divisões)?
Jon of All Trades
2
@ Jon: Com altos índices de fator de preenchimento, fragmento e leitura lenta. Para todos os índices, existe um fator de preenchimento ideal - acima e abaixo, gravações e leituras lentas. A otimização depende dos padrões de uso (quantas inserções por dia), padrões de manutenção (com que frequência sua reconstrução), dados (quão única é a chave). Índices não exclusivos tendem a exigir mais espaço livre (fator de preenchimento inferior).
Wqw 3/04