[firebase-br] RES: Transações x IBO x Delphi

Carlos H. Cantu listas em warmboot.com.br
Dom Dez 21 11:17:10 -03 2014


Pelas tabelas de monitoramento, é fácil de vc saber o que está
associado a transação que está prendendo a GC.

Refresh no SQL não existe, sendo assim, toda vez que vc dá refresh, o
IBO tem que re-executar a query e trazer os registros novamente...
como não conheço suas queries nem o sistema, não posso afirmar, mas de
repente vc pode substituir por queries parametrizadas que retornem
um único registro.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

VG> Carlos, eu para monitorar o banco, estava usando o sinatica monitor

VG> E realmente eu vi errado, o máximo de transações que chega é a 15 mas isso é
VG> de outros sistemas e telas.. na tela de importação apenas tem uma transação,
VG> pude observar melhor

VG> O que ocorre.. é o numero de transações esperando o GC ... fica muito
VG> alta... no TOP fica 10 mil transações esperando o GC

VG> Na tela de importação tenho 3 situações

VG> 1) script, e uma transação... onde ela carrega os inserts e updates no banco
VG> e dou comit a cada 500 registros, ou menos... pois como existe
VG> relacionamento entre as tabelas, se eu estou por exemplo importando os
VG> estados, 26 estados.... no final dos estados dou comit antes de importar os
VG> municípios
VG> 2) algumas queries e cursores.. todas amarradas em uma única transação ....
VG> onde uso para fazer pesquisas repetitivas, e ai deixo a query aberta, e vou
VG> dando refresh para atualizar os valores... uso muito sempre antes de
VG> inserir, faço um select para ver se é necessário realmente a inclusão
VG> 3) algumas funções no delphi, receber por parâmetro um conection, e ai criam
VG> e destroem um cursor ou qry, para alguma tarefa especifica

VG> Neste senário vejo talvez sum problema no item 2, já que ficam apertas pelo
VG> tempo todo apenas dando refresh, mas sempre trazendo 1 ou nenhum registro
VG> Terminou o processo fecho tudo.

VG> E vi o seguinte o numero de transações esperando o GC, aumenta muito..

VG> Neste senário vc faz ideia do que possa ser ?



VG> Atenciosamente,
VG> Valdemir


VG> -----Mensagem original-----
VG> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H. Cantu
VG> Enviada em: sábado, 20 de dezembro de 2014 11:19
VG> Para: FireBase
VG> Assunto: Re: [firebase-br] Transações x IBO x Delphi

VG> Que eu me lembre, antes de um componente do IBO ser destruido, ele mesmo
VG> verifica se está preparado e dá o unprepare.

VG> Quanto a ter 7.000 transações, tem algo errado aí no seu código ou talvez
VG> algum bug no IBO, pois o padrão do IBO é usar a mesma transação interna e
VG> não ficar abrindo uma nova. Eu iria mais além e nesse caso faria o controle
VG> transacional explicitamente.

VG> Faça um debug mais profundo do seu código para ver o que está acontecendo.
VG> Outra coisa: o Sinatica não tem a capacidade de "capturar" informações que
VG> aconteceram muito rapidamente. Para isso, use FBScanner ou a própria
VG> TraceAPI do Firebird.

VG> []s
VG> Carlos H. Cantu
VG> www.FireBase.com.br - www.firebirdnews.org www.warmboot.com.br -
VG> blog.firebase.com.br

VG>> Pessoal tenho uma outra situação

VG>>  

VG>> Em uma rotina, de importação em massa, envolvida por várias tabelas

VG>> Clientes

VG>> Produtos

VG>> NF

VG>> Itens

VG>> Contas Receber

VG>>  

VG>> Enfim, uma importação do arquivo SPED Fiscal (para quem conhece sabe 
VG>> que em um único TXT vem informações de várias tabelas)

VG>>  

VG>> Tenho uma rotina, com vários querys, e cursores, e um script para 
VG>> inserção no banco ou update das informações lidas.

VG>>  

VG>> O que o sistema faz, lê o arquivo do sped, verifica se já tem a 
VG>> informação no cadastro, se tiver, verifica se é necessário atualizar 
VG>> se não for necessário não dá update, se for necessário, ai dá o 
VG>> update, se não existir, ai dá o insert.

VG>>  

VG>> Ocorre que, existem alguns selects, que se repetem, então para 
VG>> agilizar eu tenho alguns cursores, onde eu apenas troco os 
VG>> parâmetros e dou refresh, em alguns casos tenho querys.

VG>>  

VG>> Estou monitorando e vi que nesta rotina o número de transações sobe 
VG>> a 7 mil transações abertas, coisa que dificilmente tenho 7 mil 
VG>> queries (isso supondo que eu tenha uma transação a cada query)

VG>> Nesta janela, as consultas principais e o script tenho apenas uma 
VG>> transação, mas tenho alguns componentes que usam a transação default do
VG> ibo.

VG>>  

VG>> Monitorando pelo sinatica, tem muitas transações que não mostram o 
VG>> comando que originou a transação, isso porque, quando vc dá um close 
VG>> no query, ele fecha, mas não da o unprepare.

VG>>  

VG>> Minha ideia é dar o unprepare manual porque este número está muito alto.

VG>>  

VG>> Fora esta solução alguém tem alguma outra suspeita ?

VG>> Alguém conhece uma maneira deu adicionar antes de destruir a query 
VG>> da memória dar o unprepare na mesma ?, mas sem alterar os fontes do 
VG>> ibo ? (tipo no meu fonte, eu adicionar algo assim: antes do destroy 
VG>> de todas as query, dar o unprepare, desta forma não precisa ir form 
VG>> por form e fazer isso)

VG>>  

VG>>  

VG>>  

VG>> Atenciosamente,
VG>> Valdemir



VG>>  

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


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


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





Mais detalhes sobre a lista de discussão lista