Gravação Lenta no ApplyUpdates (Firebird 1.5)

15/02/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 ?


Mcd

Respostas

15/02/2006

Edilcimar

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!


Responder Citar

16/02/2006

Dopi

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 [b:eb6db06523]Vinicius2K[/b:eb6db06523]


Responder Citar

16/02/2006

Mcd

>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...


Responder Citar

16/02/2006

Caduengenheiro

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


Responder Citar

16/02/2006

Caduengenheiro

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

.....


Responder Citar

16/02/2006

Caduengenheiro

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 .....



Responder Citar

16/02/2006

Mcd

[i:ed15915fb1]ow.. que banco vc ta usando? [/i:ed15915fb1]
[b:ed15915fb1]Firebird 1.5[/b:ed15915fb1]

[i:ed15915fb1]outra coisa.,.. antes de iniciar a transacao vc ta verificando se ja tem transacao aberta?
if not banco.intransaction then [/i:ed15915fb1]
[b:ed15915fb1]Isso... Exatamente isso....[/b:ed15915fb1]

[i:ed15915fb1]ow.. que componente de conexao vc ta usando? [/i:ed15915fb1]
[b:ed15915fb1]dbExpress[/b:ed15915fb1]


Responder Citar

16/02/2006

Caduengenheiro

altere o isolamento da sua transacao para evitar deadlock


TD.IsolationLevel := xilREADCOMMITTED;


Responder Citar

17/02/2006

Leorez

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


Responder Citar