Qual é a melhor maneira de evitar DeadLock
22/03/2006
0
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
Posts
22/03/2006
Titanius
[]s
22/03/2006
Vinicius2k
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.
23/03/2006
Titanius
[]s
23/03/2006
Vinicius2k
Com ´wait´, a aplicação aguarda até que o registro seja destravado para executar a operação, sem gerar exceção.
23/03/2006
Titanius
[]s
24/03/2006
Etate
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
24/03/2006
Thomaz_prg
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.??
24/03/2006
Vinicius2k
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.
25/03/2006
Titanius
Opa.. aproveitando... o que você usa vinicius para firebird?
[]s
25/03/2006
Vinicius2k
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).
Clique aqui para fazer login e interagir na Comunidade :)