Qual é a melhor maneira de evitar DeadLock

22/03/2006

Qual é a melhor forma e configurações etc, para evitar deadlock Delphi 7 com IBX e Firebird 1.5 mais de 5 estações clientes ao mesmo tempo as vezes com duas ligadas já da este erro.
Error Message:
----------------------------------------
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
lock conflict on no wait transaction.
deadlock.
update conflicts with concurrent update.


Mkoch

Respostas

22/03/2006

Mkoch

Alguém ai utiliza transações???


Responder Citar

22/03/2006

Titanius

Olá, eu uso como ReadCommited, e por enquanto não tive esse problema.. mais de 45 maquinas quase ao mesmo tempo e nada...


[]s


Responder Citar

22/03/2006

Mkoch

É estranho, tb uso ReadCommited.


Responder Citar

22/03/2006

Vinicius2k

Colega,

O único segredo para não ter [i:ea00af9929]DeadLocks[/i:ea00af9929] é utilizar sempre transações curtas.
Penso que você precisaria revisar o projeto quanto às transações para não mais ter este problema.
Se suas transações já forem curtas e, pelo que pude observar, você está utilizando as transações em modo ´nowait´. *Talvez*, dependendo da forma como você está manipulando os dados, o modo ´wait´ fosse mais indicado. Se a edição de um mesmo registro por diversos usuários for constante, uma espera de alguns décimos de segundo poderia fazer o problema desaparecer.


Responder Citar

23/03/2006

Titanius

Aproveitando a deixa... Vinicius, qual a diferença do NoWait pro Wait?


[]s


Responder Citar

23/03/2006

Vinicius2k

Com ´nowait´, se o registro estiver travado, imediatamente é disparada uma exceção na aplicação.
Com ´wait´, a aplicação aguarda até que o registro seja destravado para executar a operação, sem gerar exceção.


Responder Citar

23/03/2006

Titanius

Esse Wait, tem algum delay? tipo, ele fica la a vida toda esperando ou depois de um tempo ele trava.

[]s


Responder Citar

23/03/2006

Vinicius2k

É ´eterno´... não há como configurar um tempo de espera.


Responder Citar

23/03/2006

Martins

Bom saber disso, informação nunca é d+, :D !!!!


Responder Citar

24/03/2006

Etate

Olá !

O deadlock é causado quando duas transações concorrentes ficam uma aguardando a outra acabar e vice-versa. Isto ocorre devido a sequencia de operações nas tabelas serem invertidas exemplo, a Trans1 faz update na Tab1 seguido da Tab2 e a Trans2 na Tab2 seguida da Tab1, com isso uma fica esperando a outra.
Uma forma de solucionar o problema é identificar quais as operações que entraram no deadlock e analizar o codigo para que eles tenham a mesma sequencia de operação.

Isso tambem pode ocorrer em uma única tabela, nos casos em que as transações alteram registros da tabela de forma invertida.

Até mais,
Everton


Responder Citar

24/03/2006

Thomaz_prg

Mas Vinicius, me esclarece uma dúvida....
Se eu definir minha transação no IBX com wait e setar na propriedade IDleTimer um valor por exemplo, 2000, após o tempo setado em IdleTimer, a exceção é retornada a aplicação estou certo??

Ou seja, seria um tempo máximo para tentativas, mesmo usando Wait.??


Responder Citar

24/03/2006

Vinicius2k

thomaz_prg,

Estou meio ´enferrujado´ no IBX, mas, que eu me recorde, a propriedade IdleTimer de TIBTransaction, determina quanto tempo aguardar, porém não gera exceção.
Quando atingido o tempo limite, a ação determinada na propriedade DefaultAction é executada.
Funciona como um indicador de ociosidade, e não se aplica a uma transação ´commitada´ que está aguardando e sim a uma transação aberta que está pendente de commit ou rollback.


Responder Citar

25/03/2006

Titanius

thomaz_prg, Estou meio ´enferrujado´ no IBX, mas, que eu me recorde, a propriedade IdleTimer de TIBTransaction, determina quanto tempo aguardar, porém não gera exceção. Quando atingido o tempo limite, a ação determinada na propriedade DefaultAction é executada. Funciona como um indicador de ociosidade, e não se aplica a uma transação ´commitada´ que está aguardando e sim a uma transação aberta que está pendente de commit ou rollback.


Opa.. aproveitando... o que você usa vinicius para firebird?


[]s


Responder Citar

25/03/2006

Vinicius2k

No momento, dbExpress + driver para IB da Borland e testando/estudando a aquisição do [url=http://www.devrace.com/en/fibplus/]FIB+[/url] ou driver da [url=http://www.upscene.com]Upscene[/url] para FB.

Mas tenho muitos projetos já realizados com IBX e devo utilizá-lo em um novo projeto com o FB Embeded (o dbExpress não se comporta de forma estável com o FB Embeded).


Responder Citar