[firebase-br] RES: shrink database
Fasystem Ass. em Inf. Ltda
listas em fasystem.com.br
Dom Dez 16 00:36:57 -03 2018
Boa noite a todos.
Outro dia passei por um problemão que no primeiro momento, achei que fosse
um erro do Firebird.
O BD do meu cliente passou de 50G para nada mais que 130G somente em uma
tarde, o que acabou consumindo todo o espaço do disco e por pouco não perdi
a base de dados. Tudo por causa de uma rotina de log onde eu precisava
acompanhar em tempo real o que estava acontecendo em uma rotina.
Era gravado a cada chamada, uma linha em um campo blob que era criado no
primeiro momento e atualizado a cada chamada. O log, um arquivo txt, não
tinha mais que alguns Kb. Mas agora acompanhando o post, pude perceber que é
o modo do firebird trabalhar.
Sabendo disso, com certeza vou tomar mais cuidado no futuro e não ir
utilizando blobs sem o devido tratamento em meus bds.
Obrigado Cantu pela explicação, mas como poderíamos nos precaver desse
problema?
Excluir e inserir novamente? Aumentar consideravelmente a página de dados?
-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H. Cantu
Enviada em: sábado, 15 de dezembro de 2018 22:37
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] shrink database
E> O que me deixou assustado foi o crescimento em uma das base de
E> dados, 5GB em um único dia, analisando o fato, não identifiquei nada que
justificasse.
Se vc tem o costume de usar variáveis do tipo BLOB em procedures ou
triggers, e manipula o conteudo delas dentro dessas rotinas, saiba que
cada vez que alterara-las, mesmo que seja mudando apenas 1 byte, o FB
alocará no arquivo da base de dados o espaço para um novo objeto
completo. Ou seja, imagine que vc tem uma procedure com uma variável
do tipo blob, e carrega nela um XML de 100K, e depois manipula essa
variavel 100x... A cada manipulação, o Firebird alocará pelo menos
mais 100K no disco, ou seja, no final, seu arquivo de BD cresceu pelo
menos 100 x 100K = 10MB de tamanho.
[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
E> Boa tarde Carlos H. Cantu,
E> Obrigado pela resposta, vou experimentar alterar a página de dados para
8K.
E> Pretendo realizar alguns testes utilizando uma massa de dados com
E> vários arquivos .XML. Preciso saber quanto vou gastar de
E> armazenamento por registro. Vou testar com 4k e 8k de página.
E> O que me deixou assustado foi o crescimento em uma das base de
E> dados, 5GB em um único dia, analisando o fato, não identifiquei nada que
justificasse.
E> Abraços!
E> Em sex, 14 de dez de 2018 às 08:33, Carlos H. Cantu
E> <listas em warmboot.com.br> escreveu:
E> Aparentemente é um "problema" no IBAnalyst/gstat... até o Firebird
E> 2.5, o gstat não conseguia contabilizar o espaço ocupado pelos blobs
E> quando os mesmos são armazenados em páginas de blobs (e não em
E> páginas de dados). Então acredito que seus XMLs realmente estejam
E> consumindo os 11GB, apesar do IBA (que se baseia nas estatísticas)
E> mostrar um valor muito menor.
E> Outra coisa que se deve levar em conta é que uma página de blob só
E> armazena dados de um único blob, então dependendo do tamanho do blob
E> armazenado lá e do próprio tamanho da página, pode haver um certo
E> "desperdício" de espaço.
E> PS: Experimente aumentar o tamanho da página de dados do seu banco, de
E> 4K para 8K. Com isso, provavelmente mais "XMLs" irão caber em uma
E> página de dados e, possivelmente, haverá alguma diminuição no tamanho
E> do arquivo.
E> []s
E> Carlos H. Cantu
E> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
E> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
E>> Obrigado pela resposta.
E>> No caso mencionado anteriormente a tabela é exclusiva para BLOB.
E>> Utilizamos o campo BLOB para armazenar arquivos .XML de NFs. O
E>> detalhe é que a tabela possui dois campos BLOBs, XML de envio e
retorno.
E>> Fiz alguns testes para identificar o impacto desta tabela no tamanho do
banco.
E>> O tamanho físico do banco era de 16GB.
E>> Page Size configurado com valor 4096.
E>> O Database Analyst mostrou que o size da tabela é 748mb.
E>> Fiz BACKUP e RESTORE no banco, reduziu de 16GB para 13GB em disco.
E>> O Database Analyst mostrou que o size da tabela caiu para 723mb.
E>> Para entender o quanto essa tabela representa em disco, executei o
E>> DROP, realizei BACKUP e RESTORE no banco. O tamanho do banco reduziu de
13GB para 2GB.
E>> Conclusão: a tabela está ocupando cerca de 11GB em disco.
E>> Se puder me apontar uma direção para reduzir o tamanho em disco,
agradeço muito.
E>> Abraços!
E>> Em qui, 13 de dez de 2018 às 10:47, Carlos H. Cantu
E>> <listas em warmboot.com.br> escreveu:
E>> Em resumo: transações presas por muito tempo impedem a coleta de lixo,
E>> portanto, o lixo vai acumulando e o espaço ocupado por ele só será
E>> reaproveitado após a coleta de lixo ser executada com sucesso.
E>> Blobs podem fragmentar os dados nas páginas do banco. Se esse é o
E>> caso, o recomendado é criar uma tabela só para armazenar os blobs, e
E>> fazer um link de 1 para 1 com a outra tabela relacionada.
E>> PS: Transações ReadCommited + ReadOnly não impedem a coleta de lixo.
E>> PS/2: Por questões de segurança, a lista não permite anexos.
E>> []s
E>> Carlos H. Cantu
E>> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
E>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
E>>> Bom dia a todos,
E>>> Carlos H. Cantu, poderia citar um exemplo de mau uso do controle
E>>> transacional que poderia causar o aumento demasiado de tamanho do
banco de dados?
E>>> Gostaria de entender melhor como otimizar o uso de espaço para
E>>> tabelas com campo BLOB. Não encontrei tópicos falando especificamente
do assunto.
E>>> Tenho casos em que o Database Analyst apontou que o RealFill da
E>>> tabela está com valor 4. Se aumentar o tamanho da página consigo
E>>> reduzir o espaço alocado em disco para um banco de dados já populado?
E>>> Em anexo o resultado da ferramenta Database Analyst.
E>>> Abraços!
E>>> Em sáb, 8 de dez de 2018 às 11:00, Carlos H. Cantu
E>>> <listas em warmboot.com.br> escreveu:
E>>> O fato do banco não "enxugar" não é um problema, e sim um benefício.
É
E>>> sempre mais rápido reaproveitar um espaço previamente alocado do que
E>>> solicitar ao SO pra alocar mais espaço no disco.
E>>> Se o seu banco está aumentando de tamanho demasiadamente, sugiro que
E>>> reveja seu controle transacional, pois possivelmente a coleta de
lixo
E>>> não está conseguindo fazer seu papel satisfatoriamente, impedindo
que
E>>> o espaço ocupado pelo "lixo" seja reaproveitado como deveria.
E>>> []s
E>>> Carlos H. Cantu
E>>> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
E>>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
E> GB>>> Também gostaria que existisse algo nesse sentido, pois o banco
nunca reduz
E> GB>>> o tamanho, apenas aumenta e vai ficando "inchado". Aqui na
empresa,
E> GB>>> acabamos tendo que agendar um procedimento de backup/restore
para os
E> GB>>> clientes maiores, executado no início do dia no servidor a cada
X dias
E> GB>>> (conforme a quantidade de movimentações).
E> GB>>> Seria interessante não ter que recriar todo o banco, o que
considero um
E> GB>>> procedimento drástico, visto que se acontecer qualquer
imprevisto no
E> GB>>> restore, o cliente fica com um banco incompleto e inutilizável.
E> GB>>> Em qua, 5 de dez de 2018 20:55, centriscorps em gmail.com <
E> GB>>> centriscorps em gmail.com escreveu:
E> >>>> Você consegue reajustar o espaço em disco fazendo o famoso backup
e em
E> >>>> seguida restore.
E> >>>>
E> >>>> Renato
E> >>>>
E> >>>> Em qua, 5 de dez de 2018 às 18:57, Sofia Bonato de Moraes - EES <
E> >>>> sbonato em ees.com.br> escreveu:
E> >>>>
E> >>>> > Boa tarde pessoal,
E> >>>> >
E> >>>> > O Firebird possui algum comando tipo shrink database para
reajustar o
E> >>>> > espaço
E> >>>> > em disco?
E> >>>> >
E> >>>> > Obrigada.
E> >>>> >
E> >>>> > ______________________________________________
E> >>>> > FireBase-BR (www.firebase.com.br) - Hospedado em
www.locador.com.br
E> >>>> > Para saber como gerenciar/excluir seu cadastro na lista, use:
E> >>>> > http://www.firebase.com.br/fb/artigo.php?id=1107
E> >>>> > Para consultar mensagens antigas:
E> >>>> > http://www.firebase.com.br/pesquisa_lista.html
E> >>>> >
E> >>>> ______________________________________________
E> >>>> FireBase-BR (www.firebase.com.br) - Hospedado em
www.locador.com.br
E> >>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
E> >>>> http://www.firebase.com.br/fb/artigo.php?id=1107
E> >>>> Para consultar mensagens antigas:
E> >>>> http://www.firebase.com.br/pesquisa_lista.html
E> >>>>
E> GB>>> ______________________________________________
E> GB>>> FireBase-BR (www.firebase.com.br) - Hospedado em
www.locador.com.br
E> GB>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
E> GB>>> http://www.firebase.com.br/fb/artigo.php?id=1107
E> GB>>> Para consultar mensagens antigas:
E> GB>>> http://www.firebase.com.br/pesquisa_lista.html
E>>> ______________________________________________
E>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
E>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
E>>> http://www.firebase.com.br/fb/artigo.php?id=1107
E>>> Para consultar mensagens antigas:
E>>> http://www.firebase.com.br/pesquisa_lista.html
E>> ______________________________________________
E>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
E>> Para saber como gerenciar/excluir seu cadastro na lista, use:
E>> http://www.firebase.com.br/fb/artigo.php?id=1107
E>> Para consultar mensagens antigas:
E>> http://www.firebase.com.br/pesquisa_lista.html
E> ______________________________________________
E> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
E> Para saber como gerenciar/excluir seu cadastro na lista, use:
E> http://www.firebase.com.br/fb/artigo.php?id=1107
E> Para consultar mensagens antigas:
E> http://www.firebase.com.br/pesquisa_lista.html
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas:
http://www.firebase.com.br/pesquisa_lista.html
Mais detalhes sobre a lista de discussão lista