2007-07-18

Tamanho e performance

Boas noites,

No seguimento dos posts sobre performance de sistemas e tamanho, cá vai mais um texto supostamente inteligente :)

Ao fazer umas pesquisas sobre sistemas de alta disponibilidade de servidores SQL, deparei-me com um artigo interessante sobre a relação entre o tamanho das bases de dados e a possível performance dos servidor.

O que se passa é que, ao desenhar uma Base de Dados, se deve ter em conta o tamanho máximo dos campos das tabelas necessário para guardar os dados e não sobre-estimar esta medida. Passo a explicar:

Queremos criar uma tabela que contenha 2 campos:
Numero - campo numérico que contém o número de funcionário;
Nome - campo de texto que irá ter o nome do dito funcionário.

Ao criar os campos temos várias hipóteses para o tipo de dados que podemos usar. Se usarmos o tipo numérico comum (int) ocupamos 4 bytes em cada valor, ora se pensarmos que não iremos ter mais de 65000 funcionários, podemos poupar 2 bytes em cada registo se mudarmos o tipo de int para smallint. Do mesmo modo se tivermos o cuidado de verificar o tamanho máximo dos nomes dos funcionários, podemo-nos cingir a uma coluna do tipo char em vez de varchar e mais ainda se prescindirmos dos tipos Unicode.

Claro que este é um exemplo muito simples mas se extrapolarmos para toda uma Base de Dados com vários gigabytes de tamanho podemos poupar vários megabytes.

Mas no fundo, qual é o interesse desta redução de tamanho?

É essencialmente uma maneira de poder guardar mais dados por página da Base de Dados, ou seja, as Bases de Dados estão normalmente estruturadas (em termos de armazenamento em disco) numa série de páginas que têm entre 4 e 32 KiB, e cada página pode guardar um número limitado de registos. Se conseguirmos colocar mais registos por páginas beneficiamos as operações de entrada/saída de dados (feitas a nível de página) ao movimentar mais registos de cada vez.

Claro que estas considerações terão mais importância à medida que aumenta a dimensão geral dos dados, mas é sempre útil termos noção destes factores para optimizarmos o mais possível o desempenho dos sistemas.

Por hoje não vos maço mais...

2 comentários:

Anónimo disse...

Adoro este tipo de optimizações. Acredito que deve andar por aí muita coisa sem essas optimizações. Seria engraçado ver o antes e o depois de uma dessas situações.

Miguel

Pedro Ribeiro disse...

Miguel,

É de facto interessante apreciar o que se pode ganhar com, aparentemente, tão pequenas alterações. Claro que, como disse no post, só se começa a notar quando os registos de uma tabela se situam nos milhões e as BD começam a ocupar mais de algumas dezenas de gigas... Até esse patamar, podemos beneficiar muito mais de outras técnicas de optimização das BDs.