Marcelo wrote:
> Nem precisa estar trabalhando com delphi nem qualquer programa,
> trabalhe diretamente no access que vc vai notar a mesma coisa, de um
> bd de 500k ele pula sem mais nem menos pra 10M.... pra reduzir
> novamente eu importava todas as tabelas para outro bd , nos xixos da
> vida.... valeus

O re-uso de páginas numa base de dados é comum. Muitas pessoas 
questionam-se porque é que a base cresce e não 'mingua'.

Mas tudo tem uma razão. :-)

Passo a rescrever um mail que enviei para outra lista, com uma linguagem 
muito simplista, mas que revela porque este "fenómeno" acontece. O 
assunto, mas não sobre o Access - sobre o Firebird.

----------------
Em bases de dados, a escrita em disco é uma operação "cara", a ser evitada.

Imagina uma base Firebird como um livro. Um livro tem várias páginas. As
páginas podem estar limpas ou escritas. Se você apaga dados na base, o
Firebird marca as páginas como "Limpas". Da proxima vez que você
escrever algo, ele vai usar essas páginas. Se todas as paginas estiverem
escritas, aí ele sai para a rua e compra mais papel. Mas como o
objectivo é ser economico, ele usa e re-usa as paginas sempre que pode.

A unica forma de fazer o Firebird libertar as folhas é re-criar a base,
com um backup/restore. Aí ele parte do principio que é um novo livro,
logo compra apenas o papel necessário.
---------------

Complementando:

No Firebird, e devido ao seu uso de transacções ser bastante diferente 
do Access, eu até acho que este iria crescer muito mais que uma base 
Access, se fossem efectuadas as mesmas operações. O Firebird usa vários 
tipos de página para diferentes tipos de informação: dados vão para uma 
página, indices para outra, blobs para outra, etc.

O aumento de tamanho do ficheiro Firebird está muito relacionado com o 
tamanho de página.

Ao abrir uma transacção, e até esta ser commit ou rollback, a informação 
é escrita no disco. Não interessa que seja uma transacção apenas de 
leitura (um simples select), o que interessa é o seu isolamento de 
outras transacções. A base pode assim "crescer de tamanho" devido a um 
simples select.

Quando se procede a uma operação do tipo:
DELETE FROM TABELA;
COMMIT;
o que o Firebird faz é bem simples: pega um 'flag' em cada registo, que 
indica o estado do registo, e modifica de 'On' para 'Deleted'. Os dados 
ficam na mesma na base, intactos. Assim, é possivel e relativamente 
fácil pegar nesta base de dados neste estado e recuperar toda a tabela. 
[Enfase para 'neste estado'. Se o utilizador fizer
SELECT COUNT(*) FROM TABELA;
COMMIT;
no momento seguinte, os dados ficarão quase sem recuperação. Mas isso é 
outra historia...]

Finalmente: com um hard disk de 120Gb a custar cerca de 50 dolares, 
quem se preocupa em finais de 2004 com detalhes deste tipo? :-)

Artur
Que hoje já escreveu demais. :-)



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a