Nos ambientes que utilizam banco de dados, pode-se observar que, para ocorrer o resultado final esperado, sempre se exigem bom desempenho e dados consistentes. Mas, para que isso seja possível, o administrador de banco de dados (DBA) deve se encarregar de manter sempre os recursos alinhados ao bom funcionamento.
Mas o que é manter os recursos alinhados a um bom funcionamento?
É ter as estruturas criadas de acordo com o modelo de dados, criar índices, visões e restrições de integridade na medida adequada às necessidades do ambiente do negócio e dimensionar corretamente tamanho e parâmetros de crescimento do espaço físico. São procedimentos que, alinhados, irão gerar um bom resultado.
Em uma loja, para o funcionamento do sistema de vendas, têm-se as seguintes relações: CLIENTE, PRODUTO, VENDA. Você precisa calcular o tamanho físico necessário para a criação do banco de dados.
As relações apresentam a seguinte estrutura:
CLIENTE = {CPF inteiro; NOME varchar (100)}
PRODUTO = {CODPROD inteiro; DESCRICAO varchar (50)}
VENDA = {CODVENDA inteiro, dtVenda data, valor float, CPF inteiro}
Calcule o tamanho necessário para a criação do espaço físico que deverá armazenar os dados da loja.
Cabe observar que:
> O número de linhas é definido em função da natureza do negócio. Para essa loja, considere os seguintes números de linhas:
CLIENTE = 5.000
PRODUTO = 500
VENDAS = 25.000
> O tamanho da página pode também variar em função do SGBD e do sistema operacional utilizado. 8192 é o tamanho da página para o SQL Server.
> Outra importante informação para a criação de espaços físicos é a determinação das taxas de crescimento do banco. Esse percentual é definido pelo DBA a partir do conhecimento do negócio que estiver atendendo.
Desenvolva os cálculos e verifique o tamanho do espaço a ser adotado.
Respostas
Resposta:
Para o cálculo do tamanho de uma tabela, você deverá considerar o número de linhas e o número de colunas (atributos) com comprimento fixo e variável. Faça o cálculo para cada tabela e no final some os resultados para determinar o tamanho total do espaço necessário.
Como exemplo, você deve utilizar a estimativa de cálculo apresentada pela Microsoft. Utilize as seguintes fórmulas:
Num_Rows = número de linhas na tabela
Num_Cols = número total de colunas (comprimento fixo e tamanho variável)
Fixed_Data_Size = tamanho total embytes 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
Obs.: o tamanho de uma coluna depende do tipo de dados e da especificação de comprimento.
Null_Bitmap = 2 + ((Num_Cols + 7) / 8) à nulabilidade da coluna (considerar a parte inteira do resultado)
Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
Obs: o valor 4 na fórmula é a sobrecarga do cabeçalho da linha de dados.
Rows_Per_Page = 8096 / (Row_Size + 2) (arrendondamento para baixo)
Obs: o valor 2 na fórmula é para a entrada da linha na matriz de slot da página.
Num_Pages = Num_Rows / Rows_Per_Page (arrendondamento para cima)
Tamanho da tabela (bytes) = 8192 x Num_Pages
Aplicando as fórmulas para cada tabela:
TABELA CLIENTE = {CPF inteiro; NOME varchar (100)}
Num_Rows = 5000
Num_Cols = 2
Fixed_Data_Size = 11
Num_Variable_Cols = 1
Max_Var_Size = 100
Null_Bitmap = 2 + ((2 + 7) / 8) = 3,12
Variable_Data_Size = 2 + (1 x 2) + 100 = 104
Row_Size = 11 + 104 + 3,12 + 4 = 122,12
Rows_Per_Page = 8096 / (122,12 + 2) = 65,22 ~= 65
Num_Pages = 5000 / 65 = 76,92 ~= 77
Tamanho da tabela (bytes) = 8192 x 77 = 630.784bytes = 616KB
PRODUTO = {CODPROD inteiro; DESCRICAO varchar (50)}
Num_Rows = 500
Num_Cols = 2
Fixed_Data_Size = 7
Num_Variable_Cols = 1
Max_Var_Size = 50
Null_Bitmap = 2 + ((2 + 7) / 8) = 3,12
Variable_Data_Size = 2 + (1 x 2) + 50 = 54
Row_Size = 7 + 54 + 3,12 + 4 = 68,12
Rows_Per_Page = 8096 / (68,12 + 2) ~= 115
Num_Pages = 500 / 115 ~= 5
Tamanho da tabela (bytes) = 8192 x 5 = 40.960 bytes = 40KB
VENDA = {CODVENDA inteiro, dtVenda data, valor float, CPF inteiro}
Num_Rows = 25000
Num_Cols = 4
Fixed_Data_Size = (7 + 8 + 8 + 11) = 34
// considerando 7 CODVENDA, 8 dtVenda, 8 valor (6 inteiras e 2 decimais) e 11 CPF.
Num_Variable_Cols = 0
Max_Var_Size = 0
Null_Bitmap = 2 + ((4 + 7) / 8) = 3
Variable_Data_Size = 2 + (0 x 2) + 0 = 2
Row_Size = 34 + 0 + 3 + 4 = 41
Rows_Per_Page = 8096 / (41 + 2) ~= 188
Num_Pages = 25000 / 188 ~= 133
Tamanho da tabela (bytes) = 8192 x 133 = 1.089.536 bytes = 1.064KB
Obtém-se o seguinte resultado:
O espaço físico inicial de alocação para o banco de dados da loja é de:
616 (CLIENTE) + 40 (PRODUTO) + 1064 (VENDA) = 1.720KB