Array
(
)

Gravação Lenta no ApplyUpdates (Firebird 1.5)

Mcd
   - 15 fev 2006

Tenho uma aplicação rodando em rede onde o servidor é um Pentium 4 com 512 MB de Ram e Windows 2003 Server. Existe um módulo de gravação de pedidos onde 3 operadores trabalham multi-usuario e é gravado diariamente 500 pedidos. Durante o processo de trabalho em algumas gravações (em torno de uns 30 pedidos por dia) no momento que é dado o applyupdates o sistema paralisa por uns 2 minutos até liberar a execução do sistema. Esse mesmo erro ocorre nas 3 máquinas, ou seja, não é a estação que está bloqueando... No momento que ele está aguardando a gravação se eu tentar de outro terminal gravar um pedido para o mesmo cliente ele dá um erro de DeadLock...
Alguem já passou por um problema parecido ou tem alguma dica para descobrir o que poderia estar acontecendo ?


Edilcimar
   - 15 fev 2006

Este applyupdates é dado na finalização de cada pedido ou de tempos em tempos? Se for de tempos em tempos, o volume de dados pode ficar muito grande e o tráfego na rede pode congestionar!


Dopi
   - 16 fev 2006

Dependendo da situação vc terá que controlar as transações manualmente...

Veja [url=http://forum.clubedelphi.net/viewtopic.php?t=62223]esse tópico[/url] e leia os links indicados no Post do Vinicius2K


Mcd
   - 16 fev 2006

>Este applyupdates é dado na finalização de cada pedido ou de tempos >em tempos? Se for de tempos em tempos, o volume de dados pode >ficar muito grande e o tráfego na rede pode congestionar!


A cada novo Pedido eu pego uma nova transação e dou um post + ApplyUpdates e por ultimo um Commit. A cada pedido inserido eu encerro a transação. O mais estranho é que ás vezes passa 1, 2 horas e a performance se mantem constante e de repente demora 2 minutos para gravar...


Caduengenheiro
   - 16 fev 2006

ola.. olha.. é até aceitável demorar 2 minutos a transação, agora deadlock é algo inadmissível! Toda vez que a transação iniciar, coloque um bloqueio na linha do cliente na tabela, ou seja, ative uma stored procedure e de um lock na linha.

Agora quanto aos 2 minutos, pelo jeito que voce descreveu sua rotina, o erro pode estar em outro lugar, nao acredito que seja no apply updates, mas sim em outro trecho de código

abraços


Caduengenheiro
   - 16 fev 2006

ow.. que banco vc ta usando?

outra coisa.,.. antes de iniciar a transacao vc ta verificando se ja tem transacao aberta?


if not banco.intransaction then

.....


Caduengenheiro
   - 16 fev 2006


Citação:
ow.. que componente de conexao vc ta usando?

outra coisa.,.. antes de iniciar a transacao vc ta verificando se ja tem transacao aberta?


if not banco.intransaction then

.....



Mcd
   - 16 fev 2006

ow.. que banco vc ta usando?
Firebird 1.5

outra coisa.,.. antes de iniciar a transacao vc ta verificando se ja tem transacao aberta?
if not banco.intransaction then

Isso... Exatamente isso....

ow.. que componente de conexao vc ta usando?
dbExpress


Caduengenheiro
   - 16 fev 2006

altere o isolamento da sua transacao para evitar deadlock


TD.IsolationLevel := xilREADCOMMITTED;


Leorez
   - 17 fev 2006

Estava com o mesmo problema, oq fiz foi fazer o insert na mão
Estava usando o IBX.