[firebase-br] Transacoes no DBExpress (Conclusao)
marlon david de souza
marlon em sysmo.com.br
Sex Maio 20 11:00:12 -03 2005
Boa tarde a todos,
Também usamos o DBX em estações Windows e Linux e está acontecendo o
seguinte em clientes que possuem o FB1.5.2 rodando no Linux: a medida que os
usuários vão usando o sistema (cerca de 30 simultâneos) o sistema vai ficando
lento. Somente volta a ficar rápido quando o BD é re-inicializado.
Já verifiquei todas as transações explícitas (StartTransaction) e estão
todas corretas (inclusive lenvando-se em conta eventuais excessões).
Esse problema pode ter as seguintes causas:
- O fato de o DBX não "commitar" após realizar consultas. O "commit" somente
acontece quando é feita alguma atualização de dados (delete, insert e/ou
update).
- DBX for Windows (Delphi6) com problema.
- DBX for Linux (Kylix3) com problema.
- Consultas não liberadas automaticamente ao destruir os
formularios/data-module que criaram os objetos usados para consulta
(TSQLDataset). Se estas não forem liberadas, elas continuam consumindo
memória no servidor.
- Vazamento de memória no FB (isso é uma possiblidade pois no release-notes
do FB2.0 indica que isso acontece no FB1.5)
Por enquanto ainda não achei nenuma solução. Como o hardware desses clientes
são bem potentes, esse problema está sendo, por hora, contornado. Espero que
novas versões do FB/DBX corrijam isso.
Sem mais,
----------------------
Marlon David de Souza
Desenvolvimento
Sysmo Informática Ltda
> Em Qui 19 Mai 2005 17:23, Pha-Lista escreveu:
> > Olá PHA!
> >
> > Cara, deixa eu ver se entendi:
> >
> > Quando agente faz alguma operação (select, insert, update, delete) no DBX
> > sem iniciar uma transação, ele cria uma automaticamente e mantém ela, a
> > transacao, como XXXRetaining?
>
> Sim, no IB/FB voce precisa de uma transacao aberta por isso ele faz isso,
> mais isso nao e um problema do DBExpress, muitos outro componentes tem este
> problema o IBX e um deles, o unico componente que conheco que controla e
> fecha as transacoes corretamentes e o IBO, a unica diferenca do DBExpress
> para o IBX e que nele voce tem um componete de transacao lidado ao
> IBDataSet, se construir um componente de transacao para o DBExpress ele
> fica igual.
>
> > No caso do uso do DBXPress com ClienteDataSet eu também encontro este
> > tipo de erro (no ApplyUpdates) ou o DataSetProvider controla direitinho
> > as transações?
>
> No ApplyUpdates funciona direitinho ele abre e fecha a transacao, o unico
> problema e que quando voce abriu o ClientDataSet o DBExpress inicou uma
> transacao e esta vai ficar aberta (pelo menos nos meus teste foi assim)
>
> > Se o Commit só é dado quando fazemos um controle manual das transações,
> > posso considerar, então, manter a propriedade KeepConnection do
> > SQLConnection setada como false?
>
> E uma opcao, so tem uma desvantagem, quando uma conexao e fechada todos as
> Querys preparadas sao liberadas, mais acho que funcionaria bem.
>
> A questao e a seguinte, esta transacao que o DBExpress inicia para fazer as
> leituras, atrapalha a peformance do FB em Quanto? Como nao tenho um
> aplicativo em producao usando o DbExpress com FB nao posso dizer.
>
> No IBX o problema e maior pois ele utiliza a mesma transacao para os
> updates e quando fechamos a mesma ele tambem fecha as tabelas, claro que
> ele pode funcionar igual ao DBExpress usando o TClientDataSet, eu acho que
> o mesmo se aplica ao MDO apesar de nao conhece-lo.
>
> PHA
> Nova Odessa / SP - Brazil
> -----Mensagem original-----
> From: "Francisco Thiago" jeandeadlucky em yahoo.com.br
> Date: Thu, 19 May 2005 14:22:39 -0300
> To: "FireBase" lista em firebase.com.br
> Subject: Re: [firebase-br] Transacoes no DBExpress (Conclusao)
>
> > Obrigado
> >
> > Francisco Thiago de Almeida
> > Enter&Plug Informática
> > Divisão: Desenvolvimento e Banco de dados
> > MSN: thiago em enterplug.com.br
> > Skype: enterplug_thiago
--
Mais detalhes sobre a lista de discussão lista