Compartilhar via


Exemplo de espaço em disco de índice

Sempre que um índice é criado, recriado ou descartado, o espaço em disco para as estruturas antigas (origem) e novas (destino) é necessário em seus arquivos e grupos de arquivos apropriados. A estrutura antiga não é desalocada até que a transação de 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 Requisitos de espaço em disco para operações DDL de índice.

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

Suponha que as seguintes condições sejam verdadeiras antes de criar o índice clusterizado:

  • A tabela existente (heap) contém 1 milhão de linhas. Cada linha tem 200 bytes de comprimento.

  • O índice A não clusterizado contém 1 milhão de linhas. Cada linha tem 50 bytes de comprimento.

  • O índice B não clusterizado contém 1 milhão de linhas. Cada linha tem 80 bytes de comprimento.

  • A opção de criação de memória de índice é definida como 2 MB.

  • Um valor de fator de preenchimento de 80 é usado para todos os índices existentes e novos. Isso significa que as páginas estão 80% cheias.

    Observação

    Como resultado da criação de um índice clusterizado, os dois índices não clusterizados devem ser recriados para substituir o indicador de linha pela nova chave de índice clusterizado.

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

Nas etapas a seguir, o espaço em disco temporário a ser usado durante a operação de índice e o espaço em disco permanente para armazenar os novos índices são calculados. Os cálculos mostrados são aproximados; os resultados são arredondados e consideram apenas o tamanho do nível de folha do í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 das estruturas existentes: 363 MB

  2. Determine o tamanho das estruturas de índice alvo. Suponha que a nova chave clusterizada tenha 24 bytes de comprimento, incluindo um diferenciador. O indicador de linha (8 bytes de comprimento) em ambos os í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 total em disco 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 para as estruturas de origem será desalocado após a confirmação da operação de índice.

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

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

    1. Quando SORT_IN_TEMPDB é definido como ON, o 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.

      Espaço em disco adicional (no local do tempdb ) igual ao valor configurar a opção de configuração de servidor de criação de í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 configurar a opção de configuração de servidor de criação de memória de índice = 2 MB.

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

Usando tempdb, um total de 1018 MB (816 + 202) seriam necessários para criar os índices clusterizados e não clusterizados. Embora o uso de tempdb aumente a quantidade de espaço em disco temporário usado para criar um índice, ele 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 o tempdb, consulte SORT_IN_TEMPDB Option For Indexes.

Sem usar tempdb, um total de 818 MB (816+ 2) seria necessário 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, descarta ou recompila um índice clusterizado online, é necessário espaço em disco adicional para criar e manter um índice de mapeamento temporário. Esse í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 antigas e novas.

Para calcular o espaço em disco necessário para uma operação de índice clusterizado online, siga as etapas mostradas para uma operação de índice offline e adicione esses resultados aos resultados da etapa a seguir.

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

    Neste exemplo, o indicador antigo é o ID da linha (RID) do heap (8 bytes) e o novo indicador é a chave de agrupamento (24 bytes incluindo um uniqueifier). Não há colunas sobrepostas entre os marcadores antigos e novos.

    Tamanho do í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 para tempdb se SORT_IN_TEMPDB estiver 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 Requisitos de espaço em disco para os locais das estruturas a seguir
Operação de índice offline com SORT_IN_TEMPDB = ON Espaço total durante a operação: 1018 MB:

-Tabela e índices existentes: 363 MB*

-
tempdb: 202 MB*

-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*

-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: 1058 MB:

-Tabela e índices existentes: 363 MB*

- 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*

-Índice de mapeamento temporário: 40 MB*

-Novos índices: 453 MB

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

*Esse espaço é desalocado depois que a operação de indexação é confirmada.

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

Requisitos de espaço em disco para operações DDL de índice

Espaço em disco do log de transações para operações de índice