[firebase-br] Out of memory - Muitos registros na tabela

Diego Bulgarelli diegobulg em gmail.com
Sex Fev 10 10:09:42 -03 2012


Bom dia

Acredito que este código é meio pesadinho mesmo.
Acabei de me lembrar que tem outra forma de fazer isso que é muito mais
leve:
SELECT *CODIGO, NOME, ETC* FROM TABELA ORDER BY CODIGO *ROWS 1 TO 10000*
SELECT CODIGO, NOME, ETC FROM TABELA ORDER BY CODIGO *ROWS 10001 TO 20000*
SELECT CODIGO, NOME, ETC FROM TABELA ORDER BY CODIGO *ROWS 20001 TO 30000*
Precisa usar * mesmo? são muitos campos né.
Desculpe, eu podia ter falado este SQL antes, mas eu tinha esquecido mesmo.
Se possível me fale os resultados, estou curioso :)

Atenciosamente
Diego Bulgarelli

Em 10 de fevereiro de 2012 09:14, Marcos Weimer
<marcosweimer em gmail.com>escreveu:

> Bom dia
>
> ------------------------------------------------
> Select em blocos
> ------------------------------------------------
> select first 10000 v.* from vendas_itens v
> where v.venda_id not in (select first 10000 vi.venda_id from vendas_itens
> vi order by vi.venda_id)
> order by v.venda_id
>
> Indexed Reads: 49.788.961
> Execute time = 2m 6s 563ms
>
> -----------------------------------------------
> Select normal (anterior)
> -----------------------------------------------
> select * from vendas_itens
> order by venda_id
>
> Indexed Reads: 0
> Non-Indexed Reads: 80
> Execute time = 0ms
>
> Eu acho que selecionar em blocos vai ficar impraticavel.
> Fazemos o seguinte calculo:
> selects_necessarios = total_registros / qtd_por_select
> selects_necessarios = 4.365.973 / 10.000
> selects_necessarios = 436,59 = 437
>
> Tempo apenas para os selects:
> selects_necessarios * execute_time
> 437 * 2:06 (126 segundos)
> 55062 segundos
> Oque daria 917 minutos e mais alguns segundos
> ou.. 15 horas e pouco
>
> Acredito que em blocos não será uma solução viável, ou meus calculos estão
> muito errados
>
>
> -=Ma®©oS=-
> Marcos R. Weimer
> Puma GTE 1974 Tubarão
> Delphi / C# / ASP.NET / WebServices / Firebird
>
>
>
>
> Em 10 de fevereiro de 2012 08:46, Diego Bulgarelli
> <diegobulg em gmail.com>escreveu:
>
> > Bom dia! :)
> >
> > Não sei se é a melhor solução, mas e se você selecionar de blocos em
> blocos
> > de registros?
> > Ex:
> > SELECT FIRST 10000  --> Pega os 10000 primeiros registros
> > FROM TABELA
> > ORDER BY CODIGO;
> >
> > SELECT FIRST 10000  --> Pega os 10000 primeiros registros, que não
> > estiverem dentro dos 10000 já retornados
> > FROM TABELA
> > *WHERE CODIGO NOT IN (SELECT FIRST 10000 FROM TABELA ORDER BY CODIGO) *
> > ORDER BY CODIGO;
> >
> > SELECT FIRST 10000  --> Pega os 10000 primeiros registros, que não
> > estiverem dentro dos 20000 já retornados
> > FROM TABELA
> > WHERE CODIGO NOT IN (SELECT FIRST *20000* FROM TABELA ORDER BY CODIGO)
> > ORDER BY CODIGO;
> >
> > Espero ter ajudado
> > Diego Bulgarelli
> >
> > Em 10 de fevereiro de 2012 08:36, Marcos Weimer
> > <marcosweimer em gmail.com>escreveu:
> >
> > > Bom dia
> > >
> > > Estou desenvolvendo uma rotina que transfere os dados de uma tabela
> > > especifica de um banco para outro.
> > > Faço da seguinte forma.
> > > - Monto a query dinamicamente conforme os campos da tabela
> > > - rodo o select
> > > - conecto no outro banco e vou transferindo os dados
> > > ae chega uma hora que ocorre o out of memory
> > >
> > >
> > > Se rodo o select e efetuo o fetchall na query ae ja vai tudo para o
> > brejo.
> > >
> > > A tabela tem as seguintes caracteristicas:
> > > - 96 campos (numeric, string, varchar, date)
> > > -  4.365.973 registros
> > > Isso mesmo.... este é o numero de registros que a query me retorna se
> > > executo um recordcount antes do fetchall
> > >
> > > Se não executo o fetchall o erro tb ocorre mais demoooooora pra chegar
> > até
> > > o ponto que acaba com a memoria...
> > > a cada 8 registros que passo, aloca de 8 a 12K de memoria
> > >
> > > Para conexão com o banco uso IBO 4.9.12
> > >
> > > Lembrando que isso aconteceria apenas em uma primeira sincronização,
> > depois
> > > seria transferido apenas os dados alterados.
> > >
> > > e ai.. alguma sugestão ? tem como "descarregar" os registros que ja
> > > passaram ??? (estou na pagina 2 e descarregar a 1)
> > >
> > > Mandei email aqui, pq acho que esta mais ligado a banco do que ao
> > framework
> > > de desenvolvimento.
> > >
> > > att
> > >
> > > -=Ma®©oS=-
> > > Marcos R. Weimer
> > > Puma GTE 1974 Tubarão
> > > Delphi / C# / ASP.NET / WebServices / Firebird
> > > ______________________________________________
> > > 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://firebase.com.br/pesquisa
> > >
> > ______________________________________________
> > 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://firebase.com.br/pesquisa
> >
> ______________________________________________
> 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://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista