Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Você pode usar as seguintes etapas para estimar a quantidade de espaço necessária para armazenar dados em um índice clusterizado:
- Calcule o espaço usado para armazenar dados no nível de folha do índice agrupado.
- Calcule o espaço usado para armazenar informações de índice para o índice clusterizado.
- Total dos valores calculados.
Passo 1. Calcular o espaço usado para armazenar dados no nível da folha
Especifique o número de linhas 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 e calcule o espaço necessário para o seu armazenamento:
Calcule o espaço que cada um desses grupos de colunas ocupa dentro da linha de dados. O tamanho de uma coluna depende do tipo de dados e da especificação de comprimento.
- Num_Cols = número total de colunas (comprimento fixo e comprimento variável)
- Fixed_Data_Size = tamanho total de bytes de todas as colunas de comprimento fixo
- Num_Variable_Cols = número de colunas de comprimento variável
- Max_Var_Size = tamanho máximo de bytes de todas as colunas de comprimento variável
Se o índice clusterizado não for único, contabilize a coluna uniqueifier.
O uniqueifier é uma coluna anulável de comprimento variável. É não-nulo e tem 4 bytes de tamanho nas linhas que têm valores de chave não exclusivos. Esse valor faz parte da chave de índice e é necessário para garantir que cada linha tenha um valor de chave exclusivo.
- Num_Cols = Num_ColsNum_Cols + 1
- = Num_Variable_ColsNum_Variable_Cols + 1
- = Max_Var_SizeMax_Var_Size + 4
Essas modificações pressupõem que todos os valores não são exclusivos.
Parte da linha, conhecida como bitmap nulo, é reservada para gerenciar a anulabilidade da coluna. Calcule o seu tamanho:
- Null_Bitmap = 2 + ((Num_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 na tabela, determine quanto espaço é usado para armazenar as colunas dentro da linha:
- Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
Os bytes adicionados a Max_Var_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_Size por essa porcentagem para obter uma estimativa mais precisa do tamanho geral da tabela.
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 destas colunas ainda deve estar dentro do limite de 8.000 bytes para uma coluna varchar, varbinaryou sql_variant, e de 4.000 bytes para uma coluna nvarchar. No entanto, suas larguras combinadas podem exceder o limite de 8.060 bytes em uma tabela.
Se não houver colunas de comprimento variável, defina Variable_Data_Size como 0.
Calcule o tamanho total da linha:
- Tamanho_da_Linha = Tamanho_Fixo_de_Dados + Tamanho_Variável_de_Dados + Mapa_de_Nulos + 4
O valor 4 é a sobrecarga do cabeçalho de linha de uma linha de dados.
Calcule o número de linhas por página (8.096 bytes livres por página):
- Linhas_Por_Página = 8096 / (Tamanho_Da_Linha + 2)
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. O valor 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) / (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 aumenta, mais dados são armazenados em cada página e há menos páginas. O valor 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 / (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 a quantidade de espaço necessária para armazenar os dados no nível da folha (8.192 bytes totais por página):
- Espaço_folha_utilizado = 8192 x Número_de_páginas_folha
Passo 2. Calcular o espaço usado para armazenar informações de índice
Você pode usar as seguintes etapas para estimar a quantidade de espaço necessária para armazenar os níveis superiores do índice:
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 qualquer diferenciador necessário se o índice não for único.
O uniqueifier é uma coluna anulável de comprimento variável. Tem um tamanho de 4 bytes e é não-nulo em linhas que têm valores de chave de índice não exclusivo. Esse valor faz parte da chave de índice e é necessário para garantir que cada linha tenha um valor de chave exclusivo.
- Num_Key_Cols = Num_Key_ColsNum_Key_Cols + 1
- Num_Variable_Key_Cols = Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
- Max_Var_Key_Size = Max_Var_Key_SizeMax_Var_Key_Size + 4
Essas modificações pressupõem que todos os valores não são exclusivos.
Calcule o tamanho nulo do bitmap:
Se houver colunas anuláveis na chave de índice, parte da linha de índice será reservada para o bitmap nulo. Calcule o seu tamanho:
- 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 no índice, 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 de comprimento 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 sobrecarga do cabeçalho numa linha de índice) + 6 (para o ponteiro de ID da página-filho)
Calcule o número de linhas de índice por página (8.096 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. A
2na fórmula é para a entrada da linha no array de slots da página.Calcule o número de níveis no índice:
- Níveis_não_folha = 1 + log (Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Arredondar este valor para o número inteiro mais próximo. Esse valor não inclui o nível de folha do índice 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))
em que 1 <= Nível <= Níveis não-folha
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 1.000 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 1.000 linhas de índice. O próximo nível do índice tem que armazenar 40 linhas. Isto significa que requer duas páginas. O nível final do índice tem que armazenar duas linhas. Isto significa que requer uma página. Isto resulta em 43 páginas de índice não-folha. Quando estes números são utilizados nas fórmulas anteriores, o resultado é o seguinte:
Níveis não-folha = 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 (8.192 bytes totais por página):
- Index_Space_Used = 8192 x Número_de_Páginas_Índice
Passo 3. Total dos valores calculados
Total dos valores obtidos nas duas etapas anteriores:
- Tamanho do índice agrupado (bytes) = Leaf_Space_Used + Index_Space_used
Este cálculo não considera as seguintes condições:
Particionamento: A sobrecarga de espaço do particionamento é mínima, mas complexa de calcular. Não é importante incluir.
Páginas de alocação: há pelo menos uma página do IAM usada para rastrear as páginas alocadas a um heap. 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), text, ntext, xml e image é complexo. É suficiente apenas adicionar o tamanho médio dos valores de LOB esperados, multiplicar por Num_Rows e adicioná-lo ao tamanho total do índice 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 Usar colunas esparsas.