Zapytałeś
gdzie przechowywane są niezaangażowane dane, aby transakcja READ_UNCOMMITTED mogła odczytać nieprzypisane dane z innej transakcji?
Aby odpowiedzieć na twoje pytanie, musisz wiedzieć, jak wygląda architektura InnoDB.
Poniższe zdjęcie zostało stworzone lata temu przez CTO Percona Vadima Tkachenko
Według dokumentacji MySQL na temat modelu transakcji i blokowania InnoDB
COMMIT oznacza, że zmiany dokonane w bieżącej transakcji są trwałe i stają się widoczne dla innych sesji. Natomiast instrukcja ROLLBACK anuluje wszystkie modyfikacje dokonane przez bieżącą transakcję. Zarówno COMMIT, jak i ROLLBACK zwalniają wszystkie blokady InnoDB ustawione podczas bieżącej transakcji.
Ponieważ COMMIT i ROLLBACK zarządzają widocznością danych, READ COMMITTED i READ UNCOMMITTED musiałyby polegać na strukturach i mechanizmach, które rejestrują zmiany
- Wycofywanie segmentów / Cofnij spację
- Ponów dzienniki
- Luki Blokuje przeciwko zaangażowanym stołom
Wycofywanie segmentów i Cofnij przestrzeń wiedziałoby, jak wyglądały zmienione dane przed ich zastosowaniem. Ponów dzienniki będą wiedzieć, jakie zmiany należy wprowadzić, aby dane były aktualizowane.
Ty też zapytałeś
dlaczego nie jest możliwe, aby transakcja READ_COMMITTED odczytała niezaangażowane dane, tj. wykonała „brudny odczyt”? Jaki mechanizm wymusza to ograniczenie?
Przerobione są dzienniki powtórzeń, cofanie spacji i zablokowane rzędy. Musisz także wziąć pod uwagę pulę buforów InnoDB (gdzie możesz mierzyć brudne strony za pomocą innodb_max_dirty_pages_pct , innodb_buffer_pool_pages_dirty i innodb_buffer_pool_bytes_dirty ).
W związku z tym READ COMMITTED wiedziałby, jak dane wyglądają na stałe. Dlatego nie trzeba szukać brudnych stron, które nie zostały popełnione. CZYTANIE ZATWIERDZONE byłoby niczym innym jak brudnym odczytem, który został popełniony. PRZECZYTAJ NIEZGŁOSZONE nadal wiedziałby, które wiersze mają zostać zablokowane i jakie dzienniki powtórzeń zostały odczytane lub zignorowane, aby dane były widoczne.
Aby w pełni zrozumieć blokowanie wierszy w celu zarządzania izolacją, zapoznaj się z modelem transakcji i blokowaniem InnoDB