sql >> Database teknologi >  >> RDS >> Oracle

oracle row-strid, der forårsager dødvande-fejl i JMS-applikationen med høj kapacitet

En dødvande indebærer, at hver tråd forsøger at opdatere flere rækker i en enkelt transaktion, og at disse opdateringer udføres i en anden rækkefølge på tværs af tråde. Det enklest mulige svar ville derfor være at modificere koden, så meddelelser inden for samme transaktion anvendes i en eller anden defineret rækkefølge (dvs. i rækkefølgen efter den primære nøgle). Det ville sikre, at du aldrig ville få en deadlock, selvom du stadig ville få blokerende låse, mens en tråd venter på, at en anden tråd begår sin transaktion.

Hvis du tager et skridt tilbage, virker det dog usandsynligt, at du virkelig ønsker, at mange tråde opdaterer den samme række i en tabel, når du ikke kan forudsige rækkefølgen af ​​opdateringerne. Det virker meget sandsynligt, at det ville føre til mange tabte opdateringer og noget temmelig uforudsigelig adfærd. Hvad gør din ansøgning præcist, der ville gøre den slags fornuftige? Gør du noget som at opdatere aggregerede tabeller efter at have indsat rækker i en detaljetabel (dvs. at opdatere antallet af visninger et indlæg har ud over at logge oplysninger om en bestemt visning)? Hvis ja, skal disse operationer virkelig være synkrone? Eller kan du opdatere antallet af visninger med jævne mellemrum i en anden tråd ved at samle visningerne i løbet af de sidste N sekunder?



  1. Bulk Record Update med SQL

  2. Oracle getConnection langsom

  3. Regulært udtryk for REGEXP_SUBSTR i Oracle

  4. Brug af ruby ​​til at konvertere usignerede heltal, der er gemt som signeret, tilbage til den oprindelige værdi