[firebase-br] Deadlock

Sandro Souza escovadordebits em gmail.com
Qui Maio 21 14:40:28 -03 2009


Bom dia/tarde Wilson.

Grande Wilson, prestando um pouco mais de atenção na mensagem de erro que
vocês postou inicialmente, notei que o Firebird relatou um conflito de trava
(lock conflict) em uma transação sem espera (no wait transaction).

Só por desencargo de consciência, que linguagem de programação você está
utilizando para acessar o Firebird e como você configurou as características
dessas transações?

Se uma transação foi configurada para não esperar que outra transação
conflitante termine (no wait), então esse erro é retornado imediatamente
caso seja encontrada essa situação.

Se você configurar a transação para aguardar por um certo período (wait),
que por padrão, seria cerca de 10 segundos, poderia reduzir a ocorrência
desses erros, pois cada transação, ao contrário de "chutar o pau da barraca"
imediatamente, esperaria durante um certo tempo (10 segundos por padrão)
para que a outra transação conflitante termine e ela finalmente possa
prosseguir.

Quanto mais informações você puder postar, melhor podemos te ajudar.

Espero ter ajudado mais que atrapalhado. :D

2009/5/21 Wilson Mota - GMail <wmotasjrp em gmail.com>

>  Vc sabe se o FB (2.1) tem alguma ferramenta para encerrar a transação. A
> mensagem de deadlock retorna um numero "concurrent transaction numer is
> 249410", com esse numero eu não consigo saber por ex. do que se refere a
> transação, o usuario e dessa forma encerrar a transação?
>
>
> ----- Original Message -----
> *From:* Sandro Souza <escovadordebits em gmail.com>
> *To:* FireBase <lista em firebase.com.br> ; Wilson Mota <wmotasjrp em gmail.com>
> *Sent:* Thursday, May 21, 2009 11:26 AM
> *Subject:* Re: [firebase-br] Deadlock
>
> Bom dia/tarde Wilson.
>
> Vou repetir o texto de outro post meu para um caso parecido:
>
> Infelizmente dead locks são uma realidade em situações em que há muita
> concorrência de alterações nas mesmas tabelas, como parece ser o seu caso.
>
> Nos casos em que me deparei com esse tipo de situação, eu tive que usar o
> algoritmo de "matar pelo cansaço". :D
>
> Seria algo mais ou menos assim:
>
> // Laço infinito para efetuar os processamentos até conseguir.
> repeat
>   try
>     // Inicia a transação.
>     ...(StartTransaction;)
>     // Faz todos os processamentos desejados.
>     ...
>     // Efetiva a transação.
>     ...(Commit;)
>     // Funcionou, pode sair do laço.
>     break;
>   except
>     on E: Exception do
>     begin
>       // Cancela a transação atual.
>       ...(Rollback;)
>       // Não foi qualquer mensagem relativa á chave primária ou a algum
> possível deadlock?
>       if (Pos('deadlock', LowerCase(E.Message)) + Pos('pk_',
> LowerCase(E.Message))) = 0 then
>         // Propaga a exceção, já que se trata de uma situação não esperada.
>         raise;
>     end; // on Exception
>   end; // try-finally
> until False;
>
> Dessa forma, consegui executar as operações que eu necessitava, insistindo
> até conseguir, "matando pelo cansaço".
>
> Essa idéia não serve apenas para o Firebird, serve para qualquer SGBD.
>
> Espero ter ajudado mais que atrapalhado. :D
>
> 2009/5/21 Wilson Mota - GMail <wmotasjrp em gmail.com>
>
>> Ola pessoal.
>> Após gerado a mensagem abaixo, o que posso fazer para resolver esse
>> problema de deadlock.
>> "Lock conflict on no wait transaction deadlock update conflicts with
>> concurrent update concurrent transaction numer is 249410"
>> Obrigado
>>
>> Wilson.
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>
>



Mais detalhes sobre a lista de discussão lista