Gravação Lenta no ApplyUpdates (Firebird 1.5)

15/02/2006

0

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 ?


Responder

Posts

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

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

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

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

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

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

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

16/02/2006

Caduengenheiro

altere o isolamento da sua transacao para evitar deadlock


TD.IsolationLevel := xilREADCOMMITTED;


Responder

17/02/2006

Leorez

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


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar