[firebase-br] Deadlock on execute procedure

Carlos Matos matos em comograma.pt
Quinta Outubro 28 06:33:27 -03 2021


Carlos,
Isto não é verdade. Fiz vários testes e com o parâmetros read_committed e
no_rec_version (wait desta forma está implícito), a 2ª transação aguarda
sempre pelo commit da 2ª e nunca dá qualquer erro, tenha a 1ª feito Commit
ou Rollback. Testei e posso enviar um testcase se for necessário.

Apenas falha, como já disse, se as transações concorrentes forem dentro da
mesma instancia, isto é:
t1.starttrasaction;
update some_table set campo = '12345' where chave = 1;

t2.starttransaction;
update some_table set campo = '12345' where chave = 1; // Aqui vai dar
Deadlock

se a situação for esta:
t1.starttrasaction;
update some_table set campo = '12345' where chave = 1;
showessage('Stop');

e a seguir executar outra instancia da aplicação, este 2ª instancia vai
aguardar indefinidamente até que a 1ª faça o Commit, sem dar qualquer erro.

Ou é defeito ou é mesmo assim que as transações no Firebird se comportam,
não sei, mas é o que acontece.



-----Mensagem original-----
De: lista <lista-bounces em firebase.com.br> Em Nome De Carlos H. Cantu via
lista
Enviada: 28 de outubro de 2021 00:22
Para: FireBase <lista em firebase.com.br>
Cc: Carlos H. Cantu <listas em warmboot.com.br>
Assunto: Re: [firebase-br] Deadlock on execute procedure

WAIT apenas faz esperar pela decisão da outra transação, mas se a outra
transação der commit ao invés de rollback, vai dar update conflict do mesmo
jeito.

Sugiro que leia o artigo que te mandei no email anterior.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 4 - www.firebase.com.br/guiafb4.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

CMvl> Não estou a usar datawares.  
CMvl> Estou usando Delphi a acessando as bds do firebird através das
componentes IBX.

CMvl> Fiz um teste e se usar na transação os parâmetros:  
CMvl> Read_committed
CMvl> No_rec_version

CMvl> E sendo que assim o parâmetro wait está implícito (testei e está 
CMvl> se facto), havendo um update concorrente com outra transação, esta 
CMvl> 2.ªtransacao deveria esperar que a 1.a faça o commit, mas não, 
CMvl> está a dar erro.

CMvl> Será que isto apenas acontece se estivermos a falar de instâncias 
CMvl> diferentes, ou seja, o mesmo programa chamado duas vezes?!!!
CMvl> Será que o problema é, estando eu com duas transações iniciaras na 
CMvl> mesma instância do programa, a 2.ª quando apanha um update 
CMvl> concorrente, gera o erro ignorando o parâmetro wait?!!!

CMvl> --
CMvl> Carlos Matos


CMvl> Ligado 27 de outubro de 2021 às 21:58:41, Gladiston Santana via 
CMvl> lista (lista em firebase.com.br(mailto:lista em firebase.com.br)) escreveu:

>> se estiver usando datawares (dbedit, dbcombobox, dbmemo, ....) e 
>> depois dispara uma stored talvez seu problema esteja num 
>> autocommit=true do firedac, isto é, não é tudo na mesma transação, 
>> ele tá abrindo e fechando e em algum momento que disparar a stored 
>> vai encontrar seu trabalho em edição e causando o lock. Mais ainda se 
>> houver triggers encolvidas. Dá uma olhada nisso. Procedimentos 
>> longos, eu gosto de fazer as transações manualmente ou pô-los em 
>> execute block, mesmo que chamasse uma SP lá dentro apenas para garantir
tudo no mesmo lugar.
>>  
>> Em qua., 27 de out. de 2021 às 11:13, Carlos Matos via lista < 
>> lista em firebase.com.br> escreveu:
>>  
>> > Estou tendo um problema há vários meses.
>> >  
>> > Estou a usar o Firebird 4 e tenho uma unit onde faço várias 
>> > operações, select, update, insert e no final estou a executar um 
>> > procedimento, ou seja, um Stored Procedure do Firebird.
>> >  
>> > Tudo isto está na mesma transação.
>> >  
>> >  
>> ______________________________________________
>> 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://www.firebase.com.br/pesquisa_lista.html
CMvl> ______________________________________________
CMvl> FireBase-BR (www.firebase.com.br) - Hospedado em 
CMvl> www.locador.com.br Para saber como gerenciar/excluir seu cadastro na
lista, use:
CMvl> http://www.firebase.com.br/fb/artigo.php?id=1107
CMvl> Para consultar mensagens antigas:
CMvl> http://www.firebase.com.br/pesquisa_lista.html


______________________________________________
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://www.firebase.com.br/pesquisa_lista.html




Mais detalhes sobre a lista de discussão lista