Fator de preenchimento
A opção fator de preenchimento é fornecida para ajustar o armazenamento e o desempenho de dados de índice. Quando um índice é criado ou recriado, o valor de fator de preenchimento determina a porcentagem de espaço em cada página de nível folha a ser preenchida com dados, reservando o restante em cada página como espaço livre para futuro crescimento. Por exemplo, a especificação de um valor de fator de preenchimento de 80 significa que 20 por cento de cada página de nível folha ficará vazio, fornecendo espaço para a expansão do índice à medida que dados forem adicionados à tabela subjacente. O espaço vazio é reservado entre as linhas do índice e não no final do índice.
O valor de fator de preenchimento é uma porcentagem de 1 a 100 e o padrão para todo o servidor é 0, o que significa que as páginas de nível folha estão totalmente preenchidas.
Observação |
---|
Os valores de fator de preenchimento 0 e 100 são iguais em todos os aspectos. |
Você pode usar as instruções CREATE INDEX ou ALTER INDEX para definir o valor de fator de preenchimento para índices individuais. Para modificar o valor padrão de todo o servidor, use o procedimento armazenado do sistema sp_configure. Para exibir o valor de fator de preenchimento de um ou mais índices, use sys.indexes.
Importante |
---|
A configuração do fator de preenchimento é aplicada somente quando o índice é criado ou recriado. O Mecanismo de banco de dados do SQL Server não mantém dinamicamente a porcentagem especificada de espaço vazio nas páginas. Tentar manter o espaço extra nas páginas de dados anularia o propósito do fator de preenchimento, porque o Mecanismo de Banco de Dados precisaria executar divisões de página para manter a porcentagem de espaço livre especificada pelo fator de preenchimento em cada página conforme os dados fossem inseridos. |
Considerações sobre desempenho
Divisões de página
Um valor de fator de preenchimento corretamente escolhido pode reduzir divisões potenciais de páginas fornecendo espaço suficiente para expansão do índice à medida que são adicionados dados à tabela subjacente. Quando uma nova linha é adicionada a uma página de índice cheia, o Mecanismo de Banco de Dados move aproximadamente metade das linhas para uma nova página para fornecer espaço para a nova linha. Essa reorganização é conhecida como divisão de página. Uma divisão de página abre espaço para novos registros, mas pode demorar a ser executada e é uma operação que consome muitos recursos. Além disso, também pode causar fragmentação, o que gera um aumento das operações de E/S. Quando ocorrem divisões de página freqüentemente, o índice pode ser recriado usando um valor de fator de preenchimento novo ou existente para redistribuir os dados. Para obter mais informações, consulte Reorganizando e recriando índices.
Embora um valor de fator de preenchimento baixo, diferente de 0, possa reduzir a necessidade de dividir páginas à medida que o índice cresce, o índice precisará de mais espaço de armazenamento e poderá reduzir o desempenho de leitura. Mesmo para um aplicativo orientado para muitas operações de inserção e atualização, o número de leituras de banco de dados normalmente ultrapassa o número de gravações de banco de dados por um fator de 5 a 10. Portanto, especificar um fator de preenchimento diferente do padrão pode reduzir o desempenho de leitura de banco de dados em um valor inversamente proporcional à configuração do fator de preenchimento. Por exemplo, um valor de fator de preenchimento de 50 pode fazer com que o desempenho de leitura do banco de dados seja reduzido em duas vezes. O desempenho de leitura é reduzido porque o índice contém mais páginas, portanto, aumenta as operações de E/S no disco necessárias para recuperar os dados.
Adicionando dados ao final da tabela
Um fator de preenchimento diferente de zero ou 100 poderá ser bom para o desempenho se os novos dados forem distribuídos uniformemente ao longo da tabela. No entanto, se todos os dados forem adicionados ao final da tabela, o espaço vazio nas páginas do índice não será preenchido. Por exemplo, se a coluna de chave de índice for uma coluna IDENTITY, a chave de novas linhas estará sempre aumentando e as linhas do índice serão adicionadas logicamente no final do índice. Se as linhas existentes serão atualizadas com dados que aumentam o tamanho das linhas, use um fator de preenchimento menor que 100. Os bytes adicionais em cada página ajudarão minimizar divisões de página provocadas pelo comprimento adicional nas linhas.