Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak uniknąć impasu w mysql

W moim rozumieniu zaznaczenie nie jest blokowane i nie powinno być przyczyną impasu.

Za każdym razem, gdy wstawiasz/aktualizujesz/lub usuwasz wiersz, uzyskuje się blokadę. Aby uniknąć zakleszczenia, należy upewnić się, że współbieżne transakcje nie aktualizują wiersza w kolejności, która może spowodować zakleszczenie. Ogólnie rzecz biorąc, aby uniknąć impasu musisz uzyskać blokadę zawsze w tej samej kolejności nawet w innej transakcji (np. zawsze najpierw tabela A, potem tabela B).

Ale jeśli w ramach jednej transakcji wstawisz tylko jedną tabelę, ten warunek jest spełniony, a to zwykle nie powinno prowadzić do impasu. Czy robisz coś innego w transakcji?

Zakleszczenie może się jednak zdarzyć, jeśli brakuje indeksów . Gdy wiersz jest wstawiony/zaktualizowany/usuń, baza danych musi sprawdzić ograniczenia relacyjne, to znaczy upewnić się, że relacje są spójne. W tym celu baza danych musi sprawdzić klucze obce w powiązanych tabelach. To może skutkować uzyskaniem innej blokady niż wiersz, który jest modyfikowany. Upewnij się więc, że zawsze masz indeks na kluczach obcych (i oczywiście kluczach podstawowych), w przeciwnym razie może to spowodować blokadę tabeli zamiast blokady wiersza . Jeśli nastąpi blokada tabeli, rywalizacja o blokady jest wyższa, a prawdopodobieństwo zakleszczenia wzrasta.

Nie jestem pewien, co dokładnie dzieje się w twoim przypadku, ale może to pomaga.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Gdzie DateTime jest większy niż dzisiaj

  2. Jak stworzyć tabelę w MySQL

  3. Problem z buforem MySqlDataReader GetBytes...

  4. Jak uzyskać dokładne wartości dziesiętne bez zaokrąglania w MySQL?

  5. Czy InnoDB może używać pliku stopword?