[firebase-br] Deadlock

Sandro Souza escovadordebits em gmail.com
Qui Maio 21 11:26:07 -03 2009


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