Oracle
 sql >> Baza danych >  >> RDS >> Oracle

rywalizacja o wiersz Oracle powodująca zakleszczenie w wysokoprzepustowej aplikacji JMS

Zakleszczenie oznacza, że ​​każdy wątek próbuje zaktualizować wiele wierszy w jednej transakcji i że te aktualizacje są wykonywane w innej kolejności w różnych wątkach. Najprostszą możliwą odpowiedzią byłoby zatem zmodyfikowanie kodu tak, aby komunikaty w ramach tej samej transakcji były stosowane w określonej kolejności (tj. w kolejności klucza podstawowego). Zapewniłoby to, że nigdy nie dostaniesz impasu, chociaż nadal będziesz otrzymywać blokady blokujące, gdy jeden wątek czeka na zatwierdzenie transakcji przez inny wątek.

Jednak cofając się o krok, wydaje się mało prawdopodobne, że naprawdę chcesz, aby wiele wątków aktualizowało ten sam wiersz w tabeli, gdy nie możesz przewidzieć kolejności aktualizacji. Wydaje się bardzo prawdopodobne, że doprowadziłoby to do wielu utraconych aktualizacji i dość nieprzewidywalnych zachowań. Co konkretnie robi twoja aplikacja, aby uczynić tego typu rzeczy sensownymi? Czy robisz coś w rodzaju aktualizacji tabel zbiorczych po wstawieniu wierszy do tabeli szczegółów (tj. aktualizujesz liczbę wyświetleń posta oprócz rejestrowania informacji o konkretnym widoku)? Jeśli tak, czy te operacje naprawdę muszą być synchroniczne? A może możesz okresowo aktualizować liczbę wyświetleń w innym wątku, agregując wyświetlenia z ostatnich N sekund?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pobieranie z funkcji zwracającej kursor ref do nagrania

  2. Błąd ORA-12154 na DBI->połącz się z bazą danych Oracle za pomocą Oracle Instant Client w Solarisie 10

  3. oracle - sekwencje bez sekwencji

  4. Oracle SQL:Wybieranie pojedynczego wiersza z najnowszą datą między wieloma kolumnami

  5. Jak odjąć lata od sysdate