[firebase-br] Sobre o Erro Lock Conflit on no waittranssactiondeadlock

Eduardo Jedliczka eduardo em gerasoftinfo.com.br
Ter Nov 30 18:03:14 -03 2004


O Problema de deadlock é bem simples:

Imagine que duas pessoas resolvam fazer compras num supermercado!

A primeira comprou vários produtos e se dirigiu ao caixa número 1;

A segunda comprou vários produtos e se dirigiu ao caixa número 2;

Para garantir integridade está usando uma transação do tipo consistency;

O primeiro caixa está passando os produtos e dentre eles passa uma caixa de
leite (que terá o estoque atualizado)

O segundo caixa está passando os produtos e dentre eles passa um pacote de
iogurte (que terá o estoque atualizado)

Os produtos continuam sendo passados em ambos os caixas, mas quando menos se
espera, é necessário passar um pacote de iogurte no primeiro caixa, então o
banco espera que o registro seja liberado para poder atualizar o estoque.

Por azar do destino, no segundo caixa também foi vendido uma caixa de leite,
então o banco fica esperando que o registro do leite seja liberado, porém,
este registro nunca será liberado...

Resultado: DeadLock.

Para Resolver, ou faz um processo de venda em duas fases (local via tabela
temporária e realiza uma atualização de cada vez) ou com estoque off-line,
sincronizando-o no final do dia.

Só um detalhe para os puritanos, onde está escrito registro, leia-se
páginas, já que o FB trabalha com lock por página.

[s]

=====================
Eduardo Jedliczka
GeraSoft Informática
Apucarana - PR
=====================

----- Original Message ----- 
From: "Marcilio Soares" <marcilio.soares em brfree.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, November 30, 2004 6:45 PM
Subject: Re: [firebase-br] Sobre o Erro Lock Conflit on no
waittranssactiondeadlock


> 1º A maquina que lockar o registro numa edicao primeiro
> 2º Existe uma proprieade no banco se nao me engano(Pessoal corrige se
tiver
> errad) chamada Waitlock que define o tempo de espera para erro de lock ou
> coisa assim!
> Agora eu pergunto... nowait e para que ?
>
> ----- Original Message ----- 
> From: "Luciano" <panorama_luciano em yahoo.com.br>
> To: <lista-delphi em yahoogrupos.com.br>; "FireBird" <lista em firebase.com.br>
> Sent: Tuesday, November 30, 2004 2:14 PM
> Subject: [firebase-br] Sobre o Erro Lock Conflit on no wait
> transsactiondeadlock
>
>
> Galera:
>
>  Digamos que duas maquinas ( A e B) estejam alterando o mesmo registro
> selecionado ao mesmo tempo.
> 1º Existe alguma forma de definir qual máquina irá alterar os dados
> primeiro?
> 2º Quando a máquina A estiver alterando os dados, existe alguma forma de
> colocar a máquina B em espera até que o registro seja liberado pela
máquina
> A?
>
> Nas configurações da transação, estou utilizando read_committed,
> rec_version, nowait.
> Para cada tabela utilizo uma transação.
>
> Grato pela atenção de todos.
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>





Mais detalhes sobre a lista de discussão lista