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

Transakcje równoległe w mysql

Wszystko zależy od ISOLATION LEVEL ustawiłeś.

Możesz zobaczyć, który został ustawiony za pomocą tego zapytania:

select @@global.tx_isolation, @@session.tx_isolation;

Zanim wyjaśnię różne poziomy izolacji, wyjaśnię, jakich problemów starają się unikać:

  • Brudna lektura :Dane jeszcze nie zakończonej transakcji są odczytywane przez inną transakcję.

  • Utracona aktualizacja :Dwie transakcje modyfikują wpis w tabeli równolegle. Po zakończeniu obu transakcji stosowana jest tylko jedna modyfikacja.

  • Niepowtarzalna lektura :Powtarzające się odczyty prowadzą do różnych wyników.

  • odczytanie widma :Podczas transakcji inna transakcja dodaje lub usuwa wpisy w tabeli.

Teraz dla różnych poziomów izolacji.

Przeczytaj bez zobowiązań :
Dzięki temu poziomowi izolacji operacje odczytu ignorują wszelkiego rodzaju blokady, dlatego może wystąpić dowolny z wyżej wymienionych problemów.

Przeczytaj zatwierdzone :
Ten poziom izolacji ustawia blokadę zapisu dla całej transakcji na obiektach, które powinny zostać zmodyfikowane. Blokady odczytu są ustawiane tylko podczas odczytu danych. Dlatego może wystąpić odczyt niepowtarzalny i odczyt fantomowy.

Powtarzalny odczyt :
Dzięki temu poziomowi izolacji zapewnia się, że powtarzające się operacje odczytu zawsze dają ten sam wynik, gdy parametry są takie same. Blokady są ustawione dla operacji odczytu i zapisu na łączny czas trwania transakcji. Dlatego mogą wystąpić tylko odczyty fantomowe.

Możliwość serializacji :
Najwyższy poziom izolacji gwarantuje, że wynik równolegle działających transakcji jest taki sam, jak gdyby transakcje były wykonywane jedna po drugiej. Większość baz danych tak naprawdę nie uruchamia tych transakcji jedna po drugiej, byłaby to zbyt duża utrata wydajności. Dlatego może się zdarzyć, że jedna transakcja zostanie przerwana. MySQL realizuje to na przykład za pomocą MVCC (Multi-Version Concurrency Control). Google, jeśli chcesz wiedzieć więcej. To za dużo jak na tę odpowiedź.

Podsumowując, ta tabela również to wyjaśnia:

                 | Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read
---------------------------------------------------------------------------------
Read Uncommitted | possible     | possible   | possible            | possible
Read Committed   | impossible   | impossible | possible            | possible
Repeatable Read  | impossible   | impossible | impossible          | possible
Serializable     | impossible   | impossible | impossible          | impossible
  • W tym wpisie ręcznym jest trochę więcej informacji na ten temat i jak ustawić poziom izolacji.

Wszystko to jest tylko teorią dla systemów zarządzania relacyjnymi bazami danych. Ponieważ MySQL używa MVCC (kontrola współbieżności w wielu wersjach), odczyty fantomowe nie występują podczas korzystania z InnoDB i powtarzalnego poziomu izolacji odczytu .
Z ręczne :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przechowywać znaki UTF8 w MySQL?

  2. Pełna lista lokalizacji w MySQL

  3. PDO::bindParam w pętli foreach, czy wszystkie wartości są takie same?

  4. Sprawdź czas odpowiedzi na wysłanej wiadomości - możliwe przy użyciu tylko SQL?

  5. SQL:Jaka jest domyślna kolejność zapytań?