Estimar o tamanho de um índice não agrupado
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
banco de dados SQL no Microsoft Fabric
Siga estas etapas para estimar a quantidade de espaço necessária para armazenar um índice não clusterizado:
Calcule variáveis para uso nas etapas 2 e 3.
Calcule o espaço usado para armazenar informações de índice no nível de folha do índice não agrupado.
Calcule o espaço usado para armazenar informações de índice nos níveis não foliares do índice não agrupado.
Total dos valores calculados.
Passo 1. Calcular variáveis para uso nas etapas 2 e 3
Você pode usar as etapas a seguir para calcular variáveis que são usadas para estimar a quantidade de espaço necessária para armazenar os níveis superiores do índice.
Especifique o número de linhas que estarão presentes na tabela:
Num_Rows = número de linhas na tabela
Especifique o número de colunas de comprimento fixo e de comprimento variável na chave de índice e calcule o espaço necessário para o seu armazenamento:
As colunas-chave de um índice podem incluir colunas de comprimento fixo e de comprimento variável. Para estimar o tamanho da linha do índice de nível interior, calcule o espaço que cada um desses grupos de colunas ocupa dentro da linha de índice. O tamanho de uma coluna depende do tipo de dados e da especificação de comprimento.
Num_Key_Cols = número total de colunas-chave (comprimento fixo e comprimento variável)
Fixed_Key_Size = tamanho total de bytes de todas as colunas de chave de comprimento fixo
Num_Variable_Key_Cols = número de colunas de chave de comprimento variável
Max_Var_Key_Size = tamanho máximo de bytes de todas as colunas de chave de comprimento variável
Considere o localizador de linha de dados necessário se o índice não for exclusivo:
Se o índice não clusterizado não for exclusivo, o localizador de linha de dados será combinado com a chave de índice não clusterizada para produzir um valor de chave exclusivo para cada linha.
Caso o índice não clusterizado esteja sobre uma pilha, o localizador de linha de dados será o heap RID. Este é um tamanho de 8 bytes.
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 8
Se o índice não clusterizado estiver sobre um índice clusterizado, o localizador de linha de dados será a chave de clustering. As colunas que precisam ser combinadas com a chave de índice não clusterizado são aquelas que fazem parte da chave de clustering, mas ainda não estão presentes no conjunto de colunas da chave de índice não clusterizado.
Num_Key_Cols = Num_Key_Cols + número de colunas de chave de clustering que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 1 se o índice clusterizado não for exclusivo)
Fixed_Key_Size = Fixed_Key_Size + tamanho total de bytes das colunas de chave de clusterização de comprimento fixo que não estão no conjunto de colunas de chave de índice não clusterizadas
Num_Variable_Key_Cols = Num_Variable_Key_Cols + número de colunas de chave de comprimento variável para agrupamento que não estão no conjunto de colunas de chave do índice não agrupado (+ 1 se o índice agrupado não for exclusivo)
Max_Var_Key_Size = Max_Var_Key_Size + tamanho máximo de bytes de colunas de chave de agrupamento de comprimento variável que não estejam no conjunto de colunas de chave de índice não agrupadas (+ 4 se o índice de agrupamento não for exclusivo)
Parte da linha, conhecida como bitmap nulo, pode ser reservada para gerenciar a anulabilidade da coluna. Calcule o seu tamanho:
Se houver colunas anuláveis na chave de índice, incluindo quaisquer colunas de chave de clustering necessárias, conforme descrito na Etapa 1.3, parte da linha de índice será reservada para o bitmap nulo.
Index_Null_Bitmap = 2 + ((número de colunas na linha de índice + 7) / 8)
Apenas a parte inteira da expressão anterior deve ser usada. Elimine qualquer resto.
Se não houver colunas de chave anuláveis, defina Index_Null_Bitmap como 0.
Calcule o tamanho dos dados de comprimento variável:
Se houver colunas de comprimento variável na chave de índice, incluindo quaisquer colunas de chave de índice clusterizadas necessárias, determine quanto espaço é usado para armazenar as colunas dentro da linha de índice:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Os bytes adicionados a Max_Var_Key_Size são para controlar cada coluna variável. Esta fórmula assume que todas as colunas de comprimento variável estão 100% cheias. Se você antecipar que uma porcentagem menor do espaço de armazenamento da coluna de comprimento variável será usada, poderá ajustar o valor Max_Var_Key_Size por essa porcentagem para obter uma estimativa mais precisa do tamanho geral da tabela.
Se não houver colunas de comprimento variável, defina Variable_Key_Size como 0.
Calcule o tamanho da linha de índice:
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (para a sobrecarga do cabeçalho da linha de uma linha de índice) + 6 (para o ponteiro de ID da página filha)
Calcule o número de linhas de índice por página (8096 bytes livres por página):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Como as linhas de índice não abrangem páginas, o número de linhas de índice por página deve ser arredondado para baixo para a linha inteira mais próxima. O 2 na fórmula refere-se à entrada da linha na matriz de slots da página.
Passo 2. Calcular o espaço usado para armazenar informações de índice no nível da folha
Você pode usar as etapas a seguir para estimar a quantidade de espaço necessária para armazenar o nível de folha do índice. Você precisará dos valores preservados da Etapa 1 para concluir esta etapa.
Especificar o número de colunas de comprimento fixo e de comprimento variável ao nível da folha e calcular o espaço necessário para o seu armazenamento:
Observação
Você pode estender um índice não clusterizado incluindo colunas não-chave além das colunas de chave de índice. Essas colunas adicionais são armazenadas apenas no nível de folha do índice não agrupado. Para obter mais informações, consulte Criar índices com colunas incluídas.
Observação
Você pode combinar varchar, nvarchar, varbinaryou sql_variant colunas que fazem com que a largura total da tabela definida exceda 8.060 bytes. O comprimento de cada uma dessas colunas ainda deve estar dentro do limite de 8.000 bytes para uma coluna varchar, varbinary, ou sql_variant, e 4.000 bytes para nvarchar colunas. No entanto, suas larguras combinadas podem exceder o limite de 8.060 bytes em uma tabela. Isso também se aplica a linhas de folha de índice não agrupadas que incluíram colunas.
Se o índice não clusterizado não tiver nenhuma coluna incluída, use os valores da Etapa 1, incluindo quaisquer modificações determinadas na Etapa 1.3:
Num_Leaf_Cols = Num_Key_Cols
Tamanho_Fixo_da_Folha = Tamanho_Fixo_da_Chave
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols
Max_Var_Leaf_Size = Max_Var_Key_Size
Se o índice não clusterizado tiver colunas incluídas, adicione os valores apropriados aos valores da Etapa 1, incluindo quaisquer modificações na Etapa 1.3. O tamanho de uma coluna depende do tipo de dados e da especificação de comprimento. Para obter mais informações, consulte Tipos de dados (Transact-SQL).
Num_Leaf_Cols = Num_Key_Cols + número de colunas incluídas
Tamanho_Fixo_da_Folha = Tamanho_Fixo_da_Chave + tamanho total de bytes de colunas incluídas de comprimento fixo
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + número de colunas incluídas de comprimento variável
Max_Var_Leaf_Size = Max_Var_Key_Size + tamanho máximo em bytes de colunas incluídas com comprimento variável
Tenha em conta o identificador de linha de dados:
Se o índice não clusterizado não for exclusivo, a sobrecarga para o localizador de linha de dados já foi considerada na Etapa 1.3 e nenhuma modificação adicional será necessária. Vá para a próxima etapa.
Se o índice não agrupado for exclusivo, o localizador de linha de dados deverá ser contabilizado em todas as linhas no nível da folha.
Se o índice não clusterizado estiver sobre um heap, o localizador de linha de dados será o RID do heap (tamanho 8 bytes).
Num_Leaf_Cols = Num_Leaf_Cols + 1
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1
Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8
Se o índice não clusterizado estiver sobre um índice clusterizado, o localizador de linha de dados será a chave de clustering. As colunas que devem ser combinadas com a chave de índice não clusterizada são as colunas na chave de clustering que ainda não estão presentes no conjunto de colunas de chave de índice não clusterizadas.
Num_Leaf_Cols = Num_Leaf_Cols + número de colunas de chave de clustering que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 1 se o índice clusterizado não for exclusivo)
Fixed_Leaf_Size = Fixed_Leaf_Size + número de colunas de chave de clustering de comprimento fixo que não estão no conjunto de colunas de chave de índice não clusterizadas
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + número de colunas de chave de clustering de comprimento variável que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 1 se o índice clusterizado não for exclusivo)
Max_Var_Leaf_Size = Max_Var_Leaf_Size + tamanho em bytes das colunas de chave de clustering de comprimento variável que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 4 se o índice clusterizado não for exclusivo)
Calcule o tamanho nulo do bitmap:
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Apenas a parte inteira da expressão anterior deve ser usada. Elimine qualquer resto.
Calcule o tamanho dos dados de comprimento variável:
Se houver colunas de comprimento variável (colunas de chave ou incluídas), incluindo quaisquer colunas de chave de agrupamento necessárias, conforme descrito anteriormente na Etapa 2.2, determine quanto espaço é usado para armazenar as colunas dentro da linha de índice:
Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
Os bytes adicionados a Max_Var_Key_Size são para controlar cada coluna variável. Esta fórmula assume que todas as colunas de comprimento variável estão 100% cheias. Se você antecipar que uma porcentagem menor do espaço de armazenamento da coluna de comprimento variável será usada, poderá ajustar o valor Max_Var_Leaf_Size por essa porcentagem para obter uma estimativa mais precisa do tamanho geral da tabela.
Se não houver colunas de comprimento variável (colunas de chave ou incluídas), defina Variable_Leaf_Size como 0.
Calcule o tamanho da linha de índice:
Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap + 1 (para sobrecarga de cabeçalho de linha de uma linha de índice)
Calcule o número de linhas de índice por página (8096 bytes livres por página):
Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
Como as linhas de índice não abrangem páginas, o número de linhas de índice por página deve ser arredondado para baixo para a linha inteira mais próxima. O 2 na fórmula é para a entrada da linha na matriz de slots da página.
Calcule o número de linhas livres reservadas por página, com base no fator de preenchimento especificado:
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
O fator de preenchimento usado no cálculo é um valor inteiro em vez de uma porcentagem. Como as linhas não abrangem páginas, o número de linhas por página deve ser arredondado para baixo para a linha inteira mais próxima. À medida que o fator de preenchimento cresce, mais dados serão armazenados em cada página e haverá menos páginas. O 2 na fórmula é para a entrada da linha na matriz de slots da página.
Calcule o número de páginas necessárias para armazenar todas as linhas:
Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
O número estimado de páginas deve ser arredondado para a página inteira mais próxima.
Calcule o tamanho do índice (8192 bytes totais por página):
Espaço_Folha_Utilizado = 8192 x Num_Páginas_de_Folha
Passo 3. Calcular o espaço usado para armazenar informações de índice nos níveis não foliares
Siga estas etapas para estimar a quantidade de espaço necessária para armazenar os níveis intermediário e raiz do índice. Você precisará dos valores preservados das etapas 2 e 3 para concluir esta etapa.
Calcule o número de níveis não foliares no índice:
Níveis não foliares = 1 + log( Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Arredondar este valor para o número inteiro mais próximo. Este valor não inclui o nível foliar do índice não agrupado.
Calcule o número de páginas não-folhas no índice:
Num_Index_Pages = ∑Nível (Num_Leaf_Pages/Index_Rows_Per_Page^Nível) onde 1 <= Nível <= Níveis
Arredondar cada soma para o número inteiro mais próximo. Como um exemplo simples, considere um índice onde Num_Leaf_Pages = 1000 e Index_Rows_Per_Page = 25. O primeiro nível de índice acima do nível de folha armazena 1000 linhas de índice, que é uma linha de índice por página de folha, e 25 linhas de índice podem caber por página. Isso significa que são necessárias 40 páginas para armazenar essas 1000 linhas de índice. O próximo nível do índice tem que armazenar 40 linhas. Isto significa que requer 2 páginas. O nível final do índice tem que armazenar 2 linhas. Isto significa que requer 1 página. Isto produz 43 páginas de índice não foliares. Quando estes números são utilizados nas fórmulas anteriores, o resultado é o seguinte:
Non-leaf_Levels = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, que é o número de páginas descrito no exemplo.
Calcule o tamanho do índice (8192 bytes totais por página):
Index_Space_Used = 8192 x Num_Index_Pages
Passo 4. Total dos valores calculados
Total dos valores obtidos nas duas etapas anteriores:
Tamanho do índice não clusterizado (bytes) = Espaço_Folha_Usado + Espaço_Índice_Usado
Este cálculo não considera o seguinte:
Particionamento
A sobrecarga de espaço do particionamento é mínima, mas complexa de calcular. Não é importante incluir.
Páginas de atribuição
Há pelo menos uma página do IAM usada para rastrear as páginas alocadas a um heap, mas a sobrecarga de espaço é mínima e não há algoritmo para calcular deterministicamente exatamente quantas páginas do IAM serão usadas.
Valores de objeto grande (LOB)
O algoritmo para determinar exatamente quanto espaço será usado para armazenar os tipos de dados LOB varchar(max), varbinary(max), nvarchar(max), texto, ntext, xml, e valores de imagem é complexo. É suficiente apenas adicionar o tamanho médio dos valores de LOB esperados, multiplicar por Num_Rowse adicioná-lo ao tamanho total do índice não clusterizado.
Compressão
Não é possível pré-calcular o tamanho de um índice compactado.
Colunas esparsas
Para obter informações sobre os requisitos de espaço de colunas esparsas, consulte a seção Utilizar colunas esparsas.
Ver também
Índices agrupados e não agrupados descritos
Criar índices não clusterizados
Criar índices clusterizados
estimar o tamanho de uma tabela
estimar o tamanho de um índice agrupado
estimar o tamanho de uma pilha
estimar o tamanho de um banco de dados