[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