Problema procedure - deadlock - Oracle - Fórum iMasters
By Marcelo_Ribeiro, October 11, 2017 in Oracle
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
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 ?
tem 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 :(