[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