Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
E aí, blz?
Tô com um problemão. Tenho uma aplicação Delphi que chama uma procedure. Eu inicio uma transação na aplicação, chamo a procedure, em seguida faço outras coisas na aplicação e dou um commit. Porém, se dois usuários executam esse processo ao mesmo tempo, dá erro de deadlock.
Fiz um teste e executei a procedure duas vezes concomitantemente, e ainda assim deu deadlock
Essa procedure só faz delete em várias tabelas, onde passo o id do documento. A instrução é basicamente delete from tabela where id =numeroid
Não tenho ideia do que pode ser.
Muito obrigado. Fico no aguardo.
Valeutem um código sequencial nessas tabelas. São em torno de umas 10 tabelas. nem todas as tabelas tem esse sequencial como primária. Tem uma tabela que ativa uma trigger que grava algumas informações numa tabela temporária.
Na verdade, deveria dar um lock somente nos registros que o id = sequencial. o resto nem deveria interferir :(
Quando digo sequencial pergunto , são sequences ou tabelas do tipo último registro + 1 ?
Esta trigger também pode ser teu gargalo
Sem ver o todo fica difícil opinar , mas
os registros em paralelo dependem entre si ? Em geral uma tabela que guarda número de sequencia etc (acessada por todos) gera isto.
veja quantas tabelas são "trancadas" no processo ?
o acesso é sempre via chave primária?
veja tanbém o " block-level"das tabelas envolvidas , pode estar "lockando" registros desnecessários.
existem triggers nas tabelas ?