[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