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

Valdemir - GMail valdemirjs em gmail.com
Dom Dez 21 09:50:33 -03 2014


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

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

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

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

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

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

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

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



Atenciosamente,
Valdemir


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

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

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

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

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org www.warmboot.com.br -
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
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


______________________________________________
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