Compartilhar via


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

O espaço em disco é uma consideração importante quando você cria, recompila ou descarta índices. O espaço em disco inadequado pode prejudicar o desempenho ou até mesmo fazer com que a operação de índice falhe. Este tópico fornece informações gerais que podem ajudá-lo a determinar a quantidade de espaço em disco necessária para operações de DDL (linguagem de definição de dados de índice).

Operações de índice que não exigem espaço em disco adicional

As seguintes operações de índice não exigem espaço em disco adicional:

  • ALTER INDEX REORGANIZE; no entanto, o espaço de log é necessário.

  • DROP INDEX quando você estiver descartando um índice não clusterizado.

  • DROP INDEX quando você está removendo um índice clusterizado offline sem especificar a cláusula MOVE TO e não existem índices não clusterizados.

  • CRIAR TABELA (restrições CHAVE PRIMÁRIA ou ÚNICA)

Operações de índice que exigem espaço em disco adicional

Todas as outras operações DDL de índice exigem espaço em disco temporário adicional a ser usado durante a operação e espaço em disco permanente para armazenar a nova estrutura de índice ou estruturas.

Quando uma nova estrutura de índice é criada, o espaço em disco de ambas as estruturas, a antiga (origem) e a nova (destino), é necessário para os arquivos e grupos de arquivos apropriados. A estrutura antiga não é desalocada até que a transação de criação do índice seja confirmada.

As seguintes operações DDL de índice criam novas estruturas de índice e exigem espaço em disco adicional:

  • CRIAR ÍNDICE

  • CRIAR ÍNDICE COM COMANDO DROP_EXISTING

  • ALTERAR ÍNDICE RECONSTRUIR

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY ou UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY ou UNIQUE) quando a restrição é baseada em um índice agrupado

  • DROP INDEX MOVE TO (Aplica-se somente a índices clusterizados.)

Espaço em disco temporário para classificação

Além do espaço em disco necessário para as estruturas de origem e destino, o espaço em disco temporário é necessário para classificação, a menos que o otimizador de consulta encontre um plano de execução que não exija classificação.

Se a classificação for necessária, a ordenação ocorrerá um novo índice por vez. Por exemplo, quando você recompila um índice clusterizado e índices não clusterizados associados em uma única instrução, os índices são classificados um após o outro. Portanto, o espaço em disco temporário adicional necessário para classificação só precisa ser tão grande quanto o maior índice da operação. Esse é quase sempre o índice clusterizado.

Se a opção SORT_IN_TEMPDB estiver definida como ON, o maior índice deverá se ajustar ao tempdb. Embora essa opção aumente a quantidade de espaço em disco temporário usado para criar um índice, ela pode reduzir o tempo necessário para criar um índice quando tempdb estiver em um conjunto de discos diferentes do banco de dados do usuário.

Se SORT_IN_TEMPDB for definido como OFF (o padrão), cada índice, incluindo índices particionados, será classificado em seu espaço em disco de destino; e somente o espaço em disco para as novas estruturas de índice é necessário.

Para obter um exemplo de cálculo de espaço em disco, consulte Exemplo de espaço em disco de índice.

Espaço em disco temporário para operações de índice online

Quando você executa operações de índice online, é necessário espaço em disco temporário adicional.

Se um índice clusterizado for criado, recriado ou descartado online, um índice não clusterizado temporário será criado para mapear indicadores antigos para novos indicadores. Se a opção SORT_IN_TEMPDB estiver definida como ON, esse índice temporário será criado no tempdb. Se SORT_IN_TEMPDB for definido como OFF, o mesmo grupo de arquivos ou esquema de partição que o índice de destino será usado. O índice de mapeamento temporário contém um registro para cada linha na tabela, e seu conteúdo é a união das colunas de marcadores antigos e novos, incluindo unicadores e identificadores de registro, e garantindo que haja apenas uma única cópia de qualquer coluna utilizada em ambos os marcadores. Para obter mais informações sobre operações de índice online, consulte Executar Operações de Índice Online.

Observação

A opção SORT_IN_TEMPDB não pode ser definida para instruções DROP INDEX. O índice de mapeamento temporário é sempre criado no mesmo grupo de arquivos ou esquema de partição que o índice de destino.

As operações de índice online usam o controle de versão de linha para isolar a operação de índice dos efeitos das modificações feitas por outras transações. Isso evita a necessidade de solicitar bloqueios de compartilhamento para linhas já lidas. Operações simultâneas de atualização e exclusão de usuário durante operações de índice online exigem espaço para registros de versão no tempdb. Para obter mais informações, consulte Executar Operações de Índice Online .

Exemplo de espaço de disco de índice

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

Estimar o tamanho de uma tabela

Estimar o tamanho de um índice clusterizado

Estimar o tamanho de um índice não clusterizado

Estimar o tamanho de um heap

CRIAR ÍNDICE (Transact-SQL)

ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

Especificar o fator de preenchimento para um índice

Reorganizar e recompilar índices