Compartilhar via


Estimar o tamanho de um heap

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Banco de dados SQL no Microsoft Fabric

Você pode usar as seguintes etapas para estimar a quantidade de espaço exigida para armazenar dados em um heap:

  1. Especifique o número de linhas que estarão presentes na tabela:

    • Num_Rows = número de linhas na tabela
  2. Especifique o número de colunas de comprimento fixo e 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 tamanho variável)
    • Fixed_Data_Size = tamanho total em bytes de todas as colunas de tamanho fixo
    • Num_Variable_Cols = número de colunas de tamanho variável
    • Max_Var_Size = total máximo em bytes de todas as colunas de tamanho variável
  3. Parte da linha, conhecida como bitmap nulo, é reservada para gerenciar a nulabilidade da coluna. Calcule seu tamanho:

    • Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Somente a parte do inteiro dessa expressão deve ser usada. Descarte todo o restante.

  4. Calcule o tamanho dos dados de comprimento variável:

    Se houver colunas de comprimento variável na tabela, determine quanto espaço será 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 servem para acompanhar cada coluna de tamanho variável. Essa fórmula presume que todas as colunas de comprimento variável estão 100% completas. Se você prevê que um percentual menor do espaço de armazenamento da coluna de tamanho variável será usado, pode ajustar o valor Max_Var_Size de acordo com esse percentual para obter uma estimativa mais precisa do tamanho geral da tabela.

    Note

    É possível combinar colunas varchar, nvarchar, varbinaryou sql_variant que fazem com que a largura total da tabela definida exceda 8.060 bytes. O tamanho de cada uma dessas colunas ainda deve ficar dentro do limite de 8.000 bytes para uma coluna varchar, nvarchar, varbinary ou sql_variant. No entanto, suas larguras combinadas podem exceder o limite de 8.060 bytes em uma tabela.

    Se não houver colunas de tamanho variável, defina Variable_Data_Size como 0.

  5. Calcule o tamanho total da linha:

    • Tamanho_da_Linha = Tamanho_dados_fixos + Tamanho_dados_variáveis + Mapa_de_nulos + 4

    O valor 4 na fórmula é a sobrecarga do cabeçalho da linha de dados.

  6. Calcular o número de linhas por página (8.096 bytes gratuitos por página):

    • Rows_Per_Page = 8096 / (Row_Size + 2)

    Como as linhas não abrangem páginas, o número de linhas por página deve ser arredondado para baixo até a linha inteira mais próxima. O valor 2 na fórmula é para a entrada da linha na matriz de slot da página.

  7. Calcule o número de páginas necessário para armazenar todas as linhas:

    • Num_Páginas = Num_Linhas / Linhas_Por_Página

    O número de páginas estimado deve ser arredondado para cima, até a página inteira mais próxima.

  8. Calcule a quantidade de espaço necessária para armazenar os dados no heap (8.192 bytes totais por página):

    Tamanho do heap (bytes) = 8192 x Num_Pages

Esse 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 há importância em incluir.

  • Páginas de alocação: há pelo menos uma página IAM usada para acompanhar as páginas alocadas para um heap, mas a sobrecarga de espaço é mínima e não há nenhum algoritmo para calcular deterministicamente exatamente quantas páginas IAM serão usadas.

  • Valores de objetos grandes (LOB): o algoritmo para determinar exatamente quanto espaço será usado para armazenar os tipos de dados LOB, como varchar(max), varbinary(max), nvarchar(max), text, ntext, xml e image, é complexo. É suficiente apenas adicionar o tamanho médio dos valores LOB esperados e adicioná-lo ao tamanho total do heap.

  • Compactação: você não pode pré-calcular o tamanho de um heap compactado.

  • Colunas esparsas: para obter informações sobre os requisitos de espaço de colunas esparsas, consulte Usar colunas esparsas.