Compartilhar via


Exemplo de espaço de disco de índice

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

Sempre que um índice é criado, recriado, ou cancelado, o espaço em disco tanto para a velha (fonte) quanto para a nova (destino) estrutura é necessário em seus arquivos e grupos de arquivos apropriados. A estrutura antiga não é desalocada até que a transação para a criação do índice seja confirmada. Espaço em disco temporário adicional para operações de classificação também pode ser necessário. Para obter mais informações, consulte os requisitos de espaço em disco para operações de DDL de índice.

Neste exemplo, os requisitos de espaço em disco para criar um índice clusterizado são determinados.

Suponha que as condições a seguir são verdadeiras antes de criar o índice cluster:

  • A tabela existente (heap) contém 1 milhão de linhas. Cada linha tem 200 bytes de comprimento.
  • O índice não clusterizados A contém 1 milhão de linhas. Cada linha tem 50 bytes de comprimento.
  • O índice não clusterizados B contém 1 milhão de linhas. Cada linha tem 80 bytes de comprimento.
  • A opção index create memory é definida como 2 MB.
  • Um valor de fator de preenchimento de 80 é usado para todos os índices existentes e novos. Isto significa que as páginas estão preenchidas em 80 por cento.

Observação

Como resultado da criação de um índice cluster, os dois índices não clusterizados devem ser reconstruídos para substituir o indicador de linha com a nova chave de índice clusterizado.

Cálculos de espaço em disco para uma operação de índice offline

Nos passos a seguir, são calculados tanto o espaço em disco temporário a ser usado durante a operação de índice quanto o espaço em disco permanente para armazenar novos índices. Os cálculos mostrados são aproximados; os resultados são arredondados e consideram apenas o tamanho do nível folha de índice. O til (~) é usado para indicar cálculos aproximados.

  1. Determine o tamanho das estruturas de origem.

    • Heap: 1 milhão * 200 bytes ~ 200 MB
    • Índice não clusterizado A: 1 milhão * 50 bytes / 80% ~ 63 MB
    • Índice não clusterizado B: 1 milhão * 80 bytes / 80% ~ 100 MB

    Tamanho total de estruturas existentes: 363 MB

  2. Determine o tamanho das estruturas de índice de destino. Suponha que a nova chave clusterizada tenha 24 bytes de tamanho, incluindo um uniqueifier. O indicador de linha (8 bytes de comprimento) nos dois índices não clusterizados será substituído por esta chave clusterizada.

    • Índice clusterizado: 1 milhão * 200 bytes / 80% ~ 250 MB

    • Índice não clusterizado A: 1 milhão * (50 - 8 + 24) bytes / 80% ~ 83 MB

    • Índice não clusterizado B: 1 milhão * (80 - 8 + 24) bytes /80% ~ 120 MB

    • Tamanho total de novas estruturas: 453 MB

    O espaço em disco total necessário para dar suporte às estruturas de origem e de destino durante a operação de índice é de 816 MB (363 + 453). O espaço atualmente alocado às estruturas de fonte será desalocado depois que a operação de índice estiver confirmada.

  3. Determine o espaço em disco temporário para classificação.

    Os requisitos de espaço são apresentados para a classificação em tempdb (com SORT_IN_TEMPDB definido como ON) e para a classificação no local de destino (com SORT_IN_TEMPDB definido como OFF).

    1. Quando SORT_IN_TEMPDB está definido como ON, tempdb deve ter espaço em disco suficiente para manter o maior índice (1 milhão * 200 bytes ~ 200 MB). O fator de preenchimento não é considerado na operação de classificação.

      O espaço adicional em disco (na localização ) deve ser igual ao valor memória de criação do índice = 2 MB.

      Tamanho total do espaço em disco temporário com SORT_IN_TEMPDB definido como ON ~ 202 MB.

    2. Quando SORT_IN_TEMPDB é definido como OFF (padrão), os 250 MB de espaço em disco já considerados para o novo índice na etapa 2 são usados para classificação.

      Espaço em disco adicional (no local de destino) igual ao valor de criação de memória do índice = 2 MB.

      Tamanho total do espaço em disco temporário com SORT_IN_TEMPDB definido como OFF = 2 MB.

Usando tempdbum total de 1018 MB (816 + 202) seria necessário para criar os índices clusterizados e não clusterizados. Embora o uso tempdb aumente a quantidade de espaço em disco temporário usado para criar um índice, isso pode reduzir o tempo necessário para criar um índice quando tempdb estiver em um conjunto diferente de discos do que o banco de dados do usuário. Para obter mais informações sobre como usar tempdb, consulte SORT_IN_TEMPDB Option For Indexes.

Sem usar tempdb, um total de 818 MB (816 + 2) seriam necessários para criar os índices clusterizados e não clusterizados.

Cálculos de espaço em disco para uma operação de índice clusterizado online

Quando você cria, cancela ou recria um índice clusterizados online, é necessário espaço adicional em disco para criar e manter um índice de mapeamento temporário. Este índice de mapeamento temporário contém um registro para cada linha na tabela e seu conteúdo é a união das colunas de indicadores velhas e novas.

Para calcular o espaço em disco precisado para uma operação de índice clusterizado online, siga os passos mostrados para uma operação de índice offline, e acrescente esses resultados aos resultados do passo seguinte.

  • Determine espaço para o índice de mapeamento temporário.

    Neste exemplo, o indicador antigo é a fila ID (RID) do heap (8 bytes) e o novo indicador é a chave de clusterização (24 bytes incluindo um uniqueifier). Não há nenhuma coluna sobreposta entre os indicadores novos e velhos.

    Tamanho de índice de mapeamento temporário = 1 milhão * (8 bytes + 24 bytes) / 80% ~ 40 MB.

    Esse espaço em disco deve ser adicionado ao espaço em disco necessário no local de destino se SORT_IN_TEMPDB estiver definido como OFF, ou se tempdbSORT_IN_TEMPDB for definido como ON.

Para obter mais informações sobre o índice de mapeamento temporário, consulte requisitos de espaço em disco para operações DDL de índice.

Resumo do espaço em disco

A tabela a seguir resume os resultados dos cálculos de espaço em disco.

Operação de índice Os requisitos de espaço em disco para os locais das seguintes estruturas
Operação de índice offline com SORT_IN_TEMPDB = ON Espaço total durante a operação: 1.018 MB

- Tabela e índices existentes: 363 MB 1
- tempdb: 202 MB 1
- Novos índices: 453 MB

Espaço total necessário após a operação: 453 MB
Operação de índice offline com SORT_IN_TEMPDB = OFF Espaço total durante a operação: 816 MB

- Tabela e índices existentes: 363 MB 1
- Novos índices: 453 MB

Espaço total necessário após a operação: 453 MB
Operação de índice online com SORT_IN_TEMPDB = ON Espaço total durante a operação: 1.058 MB

- Tabela e índices existentes: 363 MB 1
- tempdb (inclui índice de mapeamento): 242 MB*
- Novos índices: 453 MB

Espaço total necessário após a operação: 453 MB
Operação de índice online com SORT_IN_TEMPDB = OFF Espaço total durante a operação: 856 MB

- Tabela e índices existentes: 363 MB 1
- Índice de mapeamento temporário: 40 MB 1
- Novos índices: 453 MB

Espaço total necessário após a operação: 453 MB

1 Esse espaço é desalocado depois que a operação de índice é confirmada.

Este exemplo não considera nenhum espaço em tempdb disco temporário adicional necessário para registros de versão criados por operações simultâneas de atualização e exclusão de usuário.