[firebase-br] RES: Deadlock on execute procedure

Carlos Matos matos em comograma.pt
Quinta Outubro 28 15:47:39 -03 2021


Não sei forma alguma. Isso é algo que você vai ter sempre que resolver.

-----Mensagem original-----
De: lista <lista-bounces em firebase.com.br> Em Nome De rodrigo via lista
Enviada: 28 de outubro de 2021 19:19
Para: FireBase <lista em firebase.com.br>
Cc: rodrigo <firebase em dominioinf.com.br>
Assunto: [firebase-br] RES: Deadlock on execute procedure

Aproveitando o gancho, existe alguma forma de fazer um commit automático?

Eu nunca deixo uma transação aberta por muito tempo, mas por alguma falha de
meu sistema, Pode ser que em algum lugar fique, teria como? Tipo 10 segundo
commit se tiver aberta?

Grato

Enviado do Email para Windows

De: Carlos Matos via lista
Enviado:quinta-feira, 28 de outubro de 2021 06:36
Para: 'Carlos H. Cantu'; 'FireBase'
Cc:Carlos Matos
Assunto: Re: [firebase-br] Deadlock on execute procedure

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 
CMvl> 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


______________________________________________
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



--
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus
______________________________________________
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