[firebase-br] Versões de registros

Gabriel Bonzanini gabriel.bonzanini em gmail.com
Sex Maio 18 08:12:04 -03 2018


Bom dia!

Cantú, essa "coleta natural" pode ser verificada? Consigo fazer testes e
conferir se o espaço está realmente sendo liberado para que, se não
estiver, verifique o motivo? Consigo de alguma forma listar o "lixo"
contido em um banco de dados / tabela?

Grato pela atenção.

Em 17 de maio de 2018 16:46, Marcos R. Weimer <marcosweimer em gmail.com>
escreveu:

> ok, obrigado pelo esclarecimento, vi um possível ponto a ser melhorado que
> "não é possível", o mais importante é que entendi o processo.
>
> -=Ma®©oS=-
> Marcos R. Weimer
> Pessoas quietas têm as mentes mais barulhentas - Stephen Hawking
> http://eudoparana.blogspot.com.br/
>
>
>
> Em 17 de maio de 2018 16:41, Carlos H. Cantu <listas em warmboot.com.br>
> escreveu:
>
> >
> > A coleta de lixo "natural" é feita sempre que o Firebird acessa uma
> > página da base de dados devido a execução de algum comando (select,
> > update, etc). Se ele detectar que tem lixo naquela página, ele checa
> > se existe alguma transação ativa que ainda se interessa por esse
> > "lixo". Se houver, ele não coleta. Se não houver, ele coleta.
> >
> > Querer que a coleta de lixo não aconteça não é uma boa idéia, salvo em
> > situações muito específicas, pois com isso a quantidade de lixo que
> > será "juntado" será cada vez maior e, portanto, quando a coleta
> > acontecer, vai demorar muito mais tempo pra processar todo o lixo.
> >
> > A diferença da coleta de lixo "natural" e do sweep é que o sweep varre
> > todas as tabelas da base de dados, e também avança a OIT (quando
> > possível).
> >
> > []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
> >
> > MRW> Ola!
> >
> > MRW> Me intrometendo na discussão, pois estava lendo e fiquei com
> duvidas.
> >
> > MRW> Cantu, quando você disse:
> >
> > MRW> "Após apagar os registros, dê um commit na transação e rode um
> select
> > *
> > MRW> na tabela onde eles estavam. Isso fará com que o firebird dispare a
> > MRW> coleta de lixo nessa tabela (o lixo só será coletado se não houver
> > MRW> transações ativas anteriores a do "delete"). Após o retorno do
> comando
> > MRW> (que será nada, pois a tabela está vazia), dê um commit na
> transação e
> > MRW> proceda com a nova inserção.  "
> >
> >
> > MRW> Situações:
> >
> >
> > MRW> 1 - delete * from tabela; select * from tabela
> >
> > MRW> 2 - delete * from tabela; select campo1, campo2 from tabela
> >
> > MRW> 3 - delete * from tabela where campo1 = 1; select * from tabela
> >
> > MRW> 4 - delete * from tabela where campo1 = 1. select campo1, campo2
> from
> > tabela
> >
> > MRW> 5 - select * from tabela (sem delete)
> >
> > MRW> 6 - select campo1, campo2 from tabela
> >
> >
> > MRW> Pelo que entendi nas situações 5 e 6 não é feita a coleta de
> > MRW> lixo, e nas demais é feita, ou estou enganado ?
> >
> >
> > MRW> Dependendo da resposta já penso em otimizar alguns processos
> > MRW> para evitar a coleta de lixo (executando manualmente em horarios
> > MRW> pré-determinados (já fazemos isso))
> >
> >
> >
> >
> >
> > MRW> -=Ma®©oS=-
> > MRW> Marcos R. Weimer
> > MRW> Pessoas quietas têm as mentes mais barulhentas - Stephen Hawking
> > MRW> http://eudoparana.blogspot.com.br/
> >
> >
> >
> >
> > MRW> Em 17 de maio de 2018 15:16, Carlos H. Cantu
> > MRW> <listas em warmboot.com.br> escreveu:
> >
> > GB>> Estou fazendo testes através de um editor de SQL simples
> >  GB>> (IBExpert), excluindo 140 mil registros e incluindo-os novamente
> >  GB>> (com commit a cada 50 inserts). A cada nova execução, o banco fica
> >  GB>> com 25Mb a mais de tamanho, e o processo fica cada vez mais lento,
> >  GB>> até que chega um momento em que não é mais possível executá-lo.
> >
> > MRW>  Você precisa entender como funciona o versioning. Temos artigos no
> > MRW>  site sobre isso.
> >
> > MRW>  Quando vc apaga os registros, enquanto a coleta de lixo não for
> > feita,
> > MRW>  esse espaço ocupado por ele continuará existindo... só será
> > MRW>  reaproveitado após a coleta de lixo marcar ele como "liberado".
> >
> > MRW>  Faça outro teste:
> >
> > MRW>  Após apagar os registros, dê um commit na transação e rode um
> select
> > *
> > MRW>  na tabela onde eles estavam. Isso fará com que o firebird dispare a
> > MRW>  coleta de lixo nessa tabela (o lixo só será coletado se não houver
> > MRW>  transações ativas anteriores a do "delete"). Após o retorno do
> > comando
> > MRW>  (que será nada, pois a tabela está vazia), dê um commit na
> transação
> > e
> > MRW>  proceda com a nova inserção.
> >
> >
> >  GB>> Questão: Este é um volume de dados/operações considerado grande
> >  GB>> para o Firebird? Há algo que eu possa colocar no próprio SQL para
> >  GB>> reduzir este "inchaço"?
> >
> > MRW>  É um volume ridículo. Sei de bases de dados Firebird em produção
> com
> > MRW>  mais de 400GB. O problema, como eu apontei anteriormente, deve
> estar
> > MRW>  no seu controle transacional que está bloqueando a coleta de lixo.
> >
> > MRW>  Leia os artigos sobre versioning/mvcc/controle de concorrência no
> > MRW>  site.
> >
> > MRW>  []s
> > MRW>  Carlos H. Cantu
> > MRW>  eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.
> php
> > MRW> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
> >
> >
> >
> >
> > ______________________________________________
> > 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
> >
> ______________________________________________
> 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