[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