Como calcular o espaço em disco do banco de dados no SQL Server 2000

Por Robson Brandão, MVP

Uma dúvida muito comum para principiantes em banco de dados é calcular o espaço que será utilizado no disco pelos dados. Para realizar esse cálculo, é importante aprender alguns conceitos:

  1. Os dados são armazenados nos discos em blocos de 8KB chamados de páginas. Por exemplo, se eu criar um banco com tamanho inicial de 5 MB, esses 5 MB serão divididos em páginas ou seja, em blocos de 8 KB. Cada MB pode armazenar 128 páginas.

  2. Cada linha da tabela não pode ultrapassar 8060 bytes, exceto tipos de dados TEXT, NTEXT e IMAGE, que são armazenados em outro local.

  3. A cada 8 páginas temos 1 extent. As tabelas e índices são armazenadas em extents. Cada MB tem 16 extents e pequenos bancos podem compartilhar extents com outros.

  4. Se a linha armazenada for maior do que 8060 bytes, uma outra página será alocada.

  5. Cada página contém dados somente da mesma tabela.

Bom, agora que já temos os conceitos, vamos calcular o valor de cada linha armazenada no banco.

O esquema utilizado para o cálculo da linha varia com os tipos de dados utilizados e tem os seguintes fatores: Cabeçalho, data types com valores fixos, Null Block, Variable Block e data types com tamanhos variávies.

Todos os dados tem cabeçalhos com valores fixos de 4 bytes que servem para guardar informações sobre as colunas.

Os data types com valores fixos, como o nome já sugere, tem valores fixos de armazenamento. Por exemplo, campo tipo DATATIME (8 bytes).

Null Block utiliza 1 byte de espaço. A cada 8 campos que você tenha em uma tabela, é criado um bloco nulo.

Variable Block utiliza 2 bytes de espaço. Serve para armazenar a quantidade de colunas com tipos de dados variáveis e a cada campo variável acrescente 2 bytes.

Os Data Types com valores variáveis ocupam o valor que nós determinamos na criação do campo. Exemplo: VARCHAR(50)

Vejamos um exemplo prático:

Considere a tabela de exemplo empregados

create table empregados ( 
id int, 
nome varchar(55), 
dt_nasc datetime, 
telefone char(15))

Etapas

Total em Bytes

Primeiro de tudo, o Cabeçalho. Sabemos que ocupa 4 bytes.

4 bytes

Depois, os data types com valores fixos: id = 4 bytes e dt_nasc = 8 bytes

12 bytes

Null Block = 1 byte, pois só temos 4 campos

1 byte

Variable Block = 2 bytes + 4 bytes (2 para cada campo com dados variáveis, no exemplo, o nome e o telefone)

6 bytes

Data Types com valores variáveis (nome varchar(55) e telefone(15)

70 bytes

Total

93 bytes

Concluímos que cada linha armazenada nesta tabela ocupará 93 bytes, sobrando muito espaço ainda para preencher os 8060 que é o limite.

Abraço,
Robson Brandão