sql >> Databasteknik >  >> RDS >> Oracle

oracle rad-konflikt som orsakar dödlägesfel i JMS-applikationen med hög genomströmning

Ett dödläge innebär att varje tråd försöker uppdatera flera rader i en enda transaktion och att dessa uppdateringar görs i en annan ordning över trådarna. Det enklaste möjliga svaret skulle därför vara att modifiera koden så att meddelanden inom samma transaktion appliceras i någon definierad ordning (d.v.s. i ordning av primärnyckeln). Det skulle säkerställa att du aldrig skulle få ett dödläge även om du fortfarande skulle få blockerande lås medan en tråd väntar på att en annan tråd ska begå sin transaktion.

Om du tar ett steg tillbaka verkar det dock osannolikt att du verkligen vill att många trådar uppdaterar samma rad i en tabell när du inte kan förutsäga ordningen på uppdateringarna. Det verkar mycket troligt att det skulle leda till många förlorade uppdateringar och något ganska oförutsägbart beteende. Exakt vad gör din ansökan som skulle göra sånt här förnuftigt? Gör du något som att uppdatera aggregerade tabeller efter att ha infogat rader i en detaljtabell (dvs. uppdatera antalet visningar ett inlägg har förutom att logga information om en viss vy)? Om så är fallet, behöver dessa operationer verkligen vara synkrona? Eller kan du uppdatera antalet visningar med jämna mellanrum i en annan tråd genom att samla visningarna under de senaste N sekunderna?



  1. 10 anledningar till att ditt företag behöver Microsoft Access

  2. Få en viss veckodag inom en vecka givet av en DATETIME

  3. Table Print passar inte till sidstorleken

  4. ResultSet getString-teckenkodning för unicode-tecken