Gravação Lenta no ApplyUpdates (Firebird 1.5)
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 ?
Alguem já passou por um problema parecido ou tem alguma dica para descobrir o que poderia estar acontecendo ?
Mcd
Curtidas 0
Respostas
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
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]
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
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...
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
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
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
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
.....
outra coisa.,.. antes de iniciar a transacao vc ta verificando se ja tem transacao aberta?
if not banco.intransaction then
.....
GOSTEI 0
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
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]
[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
15/02/2006
altere o isolamento da sua transacao para evitar deadlock
TD.IsolationLevel := xilREADCOMMITTED;
TD.IsolationLevel := xilREADCOMMITTED;
GOSTEI 0
Leorez
15/02/2006
Estava com o mesmo problema, oq fiz foi fazer o insert na mão
Estava usando o IBX.
Estava usando o IBX.
GOSTEI 0