[firebase-br] Muitos Deadlock no banco

Douglas Tosi douglasht em gmail.com
Qua Out 28 14:03:12 -03 2009


2009/10/28 Marcelo Moreira <marcelomoreira.souza em gmail.com>:
> Para despachar estes eventos eu tenho 20 aplicativos clientes conectados no
> banco e fazendo um select mais ou menos assim:

Em casos de alta concorrência como este a aplicação tem que estar
preparada para tratar os deadlocks. No seu caso imagino que ela ignore
o evento lido e tente ler novamente. Os deadlocks em si não são o
problema. O banco está fazendo a parte dele.

Se ainda assim você quiser evitar deadlocks, uma possível solução é
usar uma técnica de particionamento. Por exemplo, imagine que você tem
20 desses processos que leem um evento e atualizam. Cada um é numerado
de 0 a 19 e passa esse número para o select em uma variável
id_processo. E imagine que o id_evento é um autoincremento. Você pode
fazer cada processo tratar um subconjunto diferente de dados incluindo
uma operação mod no where:

... and mod(EV.ID_EVENTO, 20) = :id_processo

Impede os deadlocks, já que cada processo passa a ver apenas um
subconjunto dos dados, mas se um processo desses cair, vai começar a
acumular dados. Não sei se esta idéia se encaixa no que você está
fazendo, mas serve pra ilustrar que tem solução. Por que você usa 20
processos pra despachar os eventos? O que significa "despachar" os
eventos?

hth,
-- 
Douglas Tosi
www.sinatica.com




Mais detalhes sobre a lista de discussão lista