[firebase-br] RES: shrink database

Carlos H. Cantu listas em warmboot.com.br
Dom Dez 16 09:03:54 -03 2018


O problema específico que eu comentei pode ser minimizado commitando
frequentemente a transação associada com a operação (commit, não
commitretaining).

[]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

FAeIL> Boa noite a todos.

FAeIL> Outro dia passei por um problemão que no primeiro momento, achei que fosse
FAeIL> um erro do Firebird. 
FAeIL> O BD do meu cliente passou de 50G para nada mais que 130G somente em uma
FAeIL> tarde, o que acabou consumindo todo o espaço do disco e por pouco não perdi
FAeIL> a base de dados. Tudo por causa de uma rotina de log onde eu precisava
FAeIL> acompanhar em tempo real o que estava acontecendo em uma rotina. 
FAeIL> Era gravado a cada chamada, uma linha em um campo blob que era criado no
FAeIL> primeiro momento e atualizado a cada chamada. O log, um arquivo txt, não
FAeIL> tinha mais que alguns Kb. Mas agora acompanhando o post, pude perceber que é
FAeIL> o modo do firebird trabalhar.
FAeIL> Sabendo disso, com certeza vou tomar mais cuidado no futuro e não ir
FAeIL> utilizando blobs sem o devido tratamento em meus bds.
FAeIL> Obrigado Cantu pela explicação, mas como poderíamos nos precaver desse
FAeIL> problema?
FAeIL> Excluir e inserir novamente? Aumentar consideravelmente a página de dados?
FAeIL>  

FAeIL> -----Mensagem original-----
FAeIL> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H. Cantu
FAeIL> Enviada em: sábado, 15 de dezembro de 2018 22:37
FAeIL> Para: lista em firebase.com.br
FAeIL> 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
FAeIL> justificasse. 

FAeIL> Se vc tem o costume de usar variáveis do tipo BLOB em procedures ou
FAeIL> triggers, e manipula o conteudo delas dentro dessas rotinas, saiba que
FAeIL> cada vez que alterara-las, mesmo que seja mudando apenas 1 byte, o FB
FAeIL> alocará no arquivo da base de dados o espaço para um novo objeto
FAeIL> completo. Ou seja, imagine que vc tem uma procedure com uma variável
FAeIL> do tipo blob, e carrega nela um XML de 100K, e depois manipula essa
FAeIL> variavel 100x... A cada manipulação, o Firebird alocará pelo menos
FAeIL> mais 100K no disco, ou seja, no final, seu arquivo de BD cresceu pelo
FAeIL> menos 100 x 100K = 10MB de tamanho.

FAeIL> []s
FAeIL> Carlos H. Cantu
FAeIL> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
FAeIL> 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
FAeIL> 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
FAeIL> 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
FAeIL> retorno.  



 E>>> Fiz alguns testes para identificar o impacto desta tabela no tamanho do
FAeIL> 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
FAeIL> 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,
FAeIL> 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
FAeIL> 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
FAeIL> 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.
FAeIL> É
  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
FAeIL> lixo
  E>>>>  não está conseguindo fazer seu papel satisfatoriamente, impedindo
FAeIL> 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
FAeIL> nunca reduz
E>>    GB>>> o tamanho, apenas aumenta e vai ficando "inchado". Aqui na
FAeIL> empresa,
E>>    GB>>> acabamos tendo que agendar um procedimento de backup/restore
FAeIL> para os
E>>    GB>>> clientes maiores, executado no início do dia no servidor a cada
FAeIL> X dias
E>>    GB>>> (conforme a quantidade de movimentações).

E>>    GB>>> Seria interessante não ter que recriar todo o banco, o que
FAeIL> considero um
E>>    GB>>> procedimento drástico, visto que se acontecer qualquer
FAeIL> 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
FAeIL> 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
FAeIL> reajustar o
E>>    >>>> > espaço
E>>    >>>> > em disco?
E>>    >>>> >
E>>    >>>> > Obrigada.
E>>    >>>> >
E>>    >>>> > ______________________________________________
E>>    >>>> > FireBase-BR (www.firebase.com.br) - Hospedado em
FAeIL> 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
FAeIL> 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
FAeIL> 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




FAeIL> ______________________________________________
FAeIL> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
FAeIL> Para saber como gerenciar/excluir seu cadastro na lista, use:
FAeIL> http://www.firebase.com.br/fb/artigo.php?id=1107
FAeIL> Para consultar mensagens antigas:
FAeIL> http://www.firebase.com.br/pesquisa_lista.html





Mais detalhes sobre a lista de discussão lista