Fórum Como evitar deadlock #551783

18/04/2016

0

tenho o seguinte cenario em minha aplicacao PDV (Firedac com Firebird 2.1)
tenho dois componentes de conexao(TFDConection1 e TFDConection2)
um para fazer atualizacoes automaticas e outro para buscar os dados no banco para o usuario realizar vendas
uma vez que a atualizacao automatica(atualizacao de preco,estoque etc) é feita em backGround é disparada a cada x tempo
o problema esta acontecendo pelo seguinte
o processo de atualizacao de produtos é demorado pois atualiza todos os produtos ai esta dando deadlock
estou fazendo assim:
Atualizacao TFDConection1
While nao terminar os produtos do
try
startranzaction
...
commit
except
rollback
end
next;
end;

estou startando uma tranzacao e comitando a cada item gravado com o objetivo de deijar as tranzacoes mais curtas possiveis
porem mesmo assim
se estartar uma tranzacao para atualizar o estoque ao vender um item esta dando conflito deadlock

venda TFDConection2
try
startranzaction
.. realiza a venda
.. atualiza o estoque diminuindo a quantidade vendida //aqui da o erro
commit
except
rollback
end;

oque estou fazendo errado
Wilson Savegnago

Wilson Savegnago

Responder

Posts

19/04/2016

Fabiano Carvalho

Sugiro encapsular principalmente essa atualização de produtos que você mencionou, diretamente no banco, de preferencia dentro de uma procedure.
Isso ajudaria o banco a ver qual a melhor maneira de executar o procedimento.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar