Commit vs Fast Commit vs Commit Cleanout w bazie danych Oracle

12

Zastanawiałem się, czy ktoś może zweryfikować moje rozumienie różnic między tymi 3 terminami w odniesieniu do baz danych Oracle.

Wiele źródeł myli te terminy i nie wyjaśnia ich szczegółowo, więc znalezienie informacji było trochę trudne.

Z tego co zebrałem:

  1. Zatwierdzanie i szybkie zatwierdzanie są dokładnie takie same, wszystkie zatwierdzenia są szybkimi zatwierdzeniami.
  2. Szybkie zatwierdzenie zasadniczo aktualizuje tylko flagę w tabeli transakcji nagłówka segmentu cofania / wycofywania, aby wskazać, że transakcja została zatwierdzona. Jednak rzeczywisty blok nie jest ponownie odwiedzany, co oznacza, że ​​adres bajtu cofania (UBA) na liście zainteresowanych transakcji (ITL), który znajduje się w nagłówku bloku danych, nadal wskazuje na tabelę transakcji odpowiedniego segmentu cofania. Ponadto bajty blokujące odpowiednich wierszy nie są zwalniane, a liczba blokad w ITL pozostaje niezmieniona (wiersze nadal zablokowane).
  3. Podczas czyszczenia zatwierdzenia blok jest ponownie odwiedzany, a ITL jest aktualizowany za pomocą SCN zatwierdzenia. Jednak liczba blokad w ITL i bajt blokujący zapisany z każdym wierszem nadal nie jest aktualizowany (wiersz nadal blokowany, podobnie jak w przypadku szybkiego zatwierdzania), nie generuje to ponownego wykonania, nawet jeśli blok został zmieniony.
  4. Bloki, które zostały zatwierdzone normalnie (== szybkie zatwierdzenie), zostaną poddane opóźnionemu czyszczeniu bloków, gdy zostaną ponownie dotknięte (i wygenerują ponowienie).
  5. Bloki, które zostały poddane czyszczeniu zatwierdzeń, zostaną wyczyszczone z opóźnieniem przy czyszczeniu bloków rejestrowania, gdy zostaną ponownie dotknięte (i wygenerują ponownie).

Mam nadzieję, że ktoś może zweryfikować te punkty! Dzięki!

BYS2
źródło

Odpowiedzi:

6

Masz odpowiednie podstawy. Jest tylko jeden typ zatwierdzenia (brak normalnego , szybkiego ...).

z dokumentu pojęć :

Po zatwierdzeniu transakcji występują następujące działania:

  • Numer zmiany systemu (SCN) jest generowany dla COMMIT.

    Wewnętrzna tabela transakcji dla powiązanych rekordów cofnięcia obszaru tabel zatwierdzonych przez transakcję. Odpowiedni unikatowy SCN transakcji jest przypisywany i zapisywany w tabeli transakcji. Patrz „Poziom izolacji z możliwością szeregowania”.

  • Proces zapisywania dziennika (LGWR) zapisuje pozostałe wpisy dziennika ponownych operacji w buforach dziennika ponownych operacji w dzienniku ponownych operacji online i SCN transakcji w dzienniku ponownych operacji online. To zdarzenie atomowe stanowi zatwierdzenie transakcji.

  • Baza danych Oracle zwalnia blokady utrzymywane w wierszach i tabelach.

    Użytkownicy, którzy zostali umieszczeni w kolejce i oczekują na blokady posiadane przez niezatwierdzoną transakcję, mogą kontynuować swoją pracę.

  • Baza danych Oracle usuwa punkty zapisu.

  • Baza danych Oracle wykonuje czyszczenie zatwierdzeń.

    Jeśli zmodyfikowane bloki zawierające dane z zatwierdzonej transakcji nadal znajdują się w SGA i jeśli żadna inna sesja ich nie modyfikuje, baza danych usuwa z bloków informacje o transakcji związane z blokowaniem. W idealnym przypadku COMMIT czyści bloki, aby kolejny SELECT nie musiał wykonywać tego zadania.

Więc czyszczenie (pełne z ponawianiem) zostanie wykonane podczas zatwierdzania, jeśli bloki są nadal w SGA.

W aktywnych systemach często zdarza się, że bloki z niezaangażowanymi transakcjami są zapisywane na dysk i usuwane z SGA. W takim przypadku blok pozostaje niezmieniony, a następne zapytanie, które go dotknie, wykona opóźnione czyszczenie bloku (punkt 5 nie występuje we wszystkich przypadkach).

Vincent Malgrat
źródło