Como evitar deadlock
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
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
Curtidas 0
Respostas
Fabiano Carvalho
18/04/2016
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.
Isso ajudaria o banco a ver qual a melhor maneira de executar o procedimento.
GOSTEI 0