Estimando o tamanho de um heap

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. Para obter mais informações, consulte Tipos de dados (Mecanismo de Banco de Dados).

    Num_Cols = número total de colunas (comprimento fixo e variável)

    Fixed_Data_Size = tamanho total em bytes de todas as colunas de comprimento fixo

    Num_Variable_Cols = número de colunas de comprimento variável

    Max_Var_Size = tamanho total máximo em bytes de todas as colunas de comprimento 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\_Key\_Size*** são para acompanhamento de cada coluna de comprimento variável. Essa fórmula presume que todas as colunas de comprimento variável estão 100% completas. 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*** de acordo com essa porcentagem para obter uma estimativa mais precisa do tamanho geral da tabela.

<div class="alert">

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/ms174214.alert_note(pt-br,SQL.100).gif" title="Observação" alt="Observação" class="note" /><strong>Observação</strong></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Você pode combinar as colunas varchar, nvarchar, varbinary ou sql_variant que fazem com que a largura total definida da tabela exceda 8.060 bytes. O comprimento de cada uma dessas colunas ainda deve ficar dentro do limite de 8.000 bytes para uma coluna varchar, nvarchar,varbinary ou sql_variant. Entretanto, as larguras combinadas podem exceder o limite de 8.060 bytes em uma tabela. Para obter mais informações, consulte <a href="ms186981(v=sql.100).md">Dados de estouro de linha excedendo 8 KB</a>.</p></td>
</tr>
</tbody>
</table>

</div>

Se não houver colunas de comprimento variável, defina ***Variable\_Data\_Size*** como 0.
  1. Calcule o tamanho total da linha:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

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

  2. Calcule o número de linhas por página (8.096 bytes livres por página):

    Rows_Per_Page = 8096 / (Row_Size + 2)

    Como as linhas não se estendem por mais de uma página, 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 slot da página.

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

Num_Pages* = Num_Rows / *Rows_Per_Page

O número de páginas estimado deve ser arredondado para cima, até a página inteira mais próxima.
  1. Calcule a quantidade de espaço necessária para armazenar os dados no heap (total de 8.192 bytes por página):

    Tamanho do heap (bytes) = 8192 x Num_Pages

Esse cálculo não considera o seguinte:

  • Particionamento

    A sobrecarga de espaço do particionamento é mínima, mas complexa para ser calculada. Não é importante incluí-la.

  • Páginas de alocação

    Há pelo menos uma página de IAM usada para rastrear as páginas alocadas a um heap, mas a sobrecarga de espaço é mínima e não há nenhum algoritmo para calcular de forma determinista exatamente quantas páginas de IAM serão usadas.

  • Valores de LOB (Objeto Grande)

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

  • Compactação

    Não é possível pré-calcular o tamanho de um heap compactado.