Gravação Lenta no ApplyUpdates (Firebird 1.5)

Delphi

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

Mcd

Curtidas 0

Respostas

Edilcimar

Edilcimar

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


GOSTEI 0
Dopi

Dopi

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


GOSTEI 0
Mcd

Mcd

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


GOSTEI 0
Caduengenheiro

Caduengenheiro

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


GOSTEI 0
Caduengenheiro

Caduengenheiro

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

.....


GOSTEI 0
Caduengenheiro

Caduengenheiro

15/02/2006

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



GOSTEI 0
Mcd

Mcd

15/02/2006

[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]


GOSTEI 0
Caduengenheiro

Caduengenheiro

15/02/2006

altere o isolamento da sua transacao para evitar deadlock


TD.IsolationLevel := xilREADCOMMITTED;


GOSTEI 0
Leorez

Leorez

15/02/2006

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


GOSTEI 0
POSTAR