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
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
Curtir tópico
+ 0
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.
Isso ajudaria o banco a ver qual a melhor maneira de executar o procedimento.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)