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:
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.
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.
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.
Se a linha armazenada for maior do que 8060 bytes, uma outra página será alocada.
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