mechanizm blokujący Oracle-zatrzaski i zapytania

X

Prywatność & Pliki cookie

ta strona używa plików cookie. Kontynuując, zgadzasz się na ich użycie. Dowiedz się więcej, w tym jak kontrolować pliki cookie.

Mam!

Advertisements

ten artykuł jest częścią serii Oracle Performance Tuning i został stworzony w celu opisania mechanizmu blokującego Oracle.

Blokada to zasób, który musisz przytrzymać, aby uzyskać dostęp do zasobu. Oracle ma dwa rodzaje zamków: inqueues i zatrzaski, teraz skupimy się na tych mechanizmach blokujących indywidualnie.

Enqueues

Enqueues są wyrafinowanymi blokadami do zarządzania dostępem do współdzielonych zasobów (takich jak tabele, wiersze, zadania, ponawiane wątki). Zapytanie może być wymagane na różnych poziomach / trybach:

  • Null
  • row share
  • row exclusive
  • Share row exclusive
  • Exclusive

jeśli sesja zawiera zapytanie w trybie udostępniania, inne sesje mogą również wziąć udział w enqueue w trybie udostępniania (dla tego samego zasobu). Jeśli sesja ma zapytanie w trybie wyłącznym, inne sesje, które chcą je uzyskać-niezależnie od tego, na jakim poziomie-muszą czekać.

gdy dostęp jest wymagany przez sesję, uzyskuje się strukturę blokady i powstaje żądanie uzyskania dostępu do zasobu na określonym poziomie (trybie). Struktura blokady jest umieszczana na jednej z trzech połączonych list, które zawieszają się od zasobu, nazywanych listami właściciela (jeśli można uzyskać zapytanie), kelnera (jeśli sesja czeka na uzyskanie zapytania) i konwertera (sesja trzyma zapytanie na jednym poziomie, ale chce je przekonwertować na inny).

poniżej kilka typowych zapytań:-

  • TM-za każdym razem, gdy sesja chce zablokować tabelę, wymagane jest Zapytanie o TM. Jeśli sesja usunie wiersz w tabeli nadrzędnej i zostanie utworzone ograniczenie odniesienia (klucz obcy) bez indeksu w tabeli podrzędnej lub jeśli sesja aktualizuje kolumny, do których odwołuje się klucz obcy, zostanie podjęta blokada udostępniania w tabeli podrzędnej. Jeśli inna sesja próbuje dokonać zmian w tabeli potomnej, musi poczekać (ponieważ chce, aby enqueue w trybie wyłącznym wiersza, a to nie jest zgodne z trybem udostępniania).
  • TX-po rozpoczęciu transakcji wymagane jest Zapytanie o TX. Transakcja jest jednoznacznie zdefiniowana przez numer segmentu wycofywania, numer slotu w tabeli transakcji segmentu wycofywania i numer sekwencyjny numeru slotu. Sesja może czekać na zapytanie TX z kilku powodów:
    1. Inna sesja blokuje żądany wiersz
    2. gdy dwie sesje próbują wstawić ten sam unikalny klucz do tabeli (żadna z nich nie zrobiła COMMITA), ostatnia sesja czeka na pierwszą, która zatwierdzi lub wycofa.
    3. w nagłówku bloku nie ma darmowego ITL (lista zainteresowanych transakcji).
  • UL-a session has taken a lock with the DBMS_LOCK.Funkcja żądania.

zatrzaski

zatrzaski zapewniają niskopoziomowy mechanizm serializacji chroniący współdzielone struktury danych w SGA. Zatrzask to rodzaj zamka, który można bardzo szybko zdobyć i uwolnić. Zatrzaski są zwykle używane, aby uniemożliwić więcej niż jednemu procesowi wykonanie tego samego fragmentu kodu w danym czasie. Po nabyciu zatrzasku, jest on nabywany na określonym poziomie, aby zapobiec impasom. Gdy proces nabywa zatrzask na pewnym poziomie, nie może następnie nabywać zatrzasku na poziomie równym lub niższym od tego poziomu (chyba że nabywa go teraz). Z każdym zatrzaskiem związana jest procedura czyszczenia, która zostanie wywołana, jeśli proces umrze podczas trzymania zatrzasku. Czyszczenie odbywa się przy użyciu usług PMON. Podstawowa implementacja zatrzasków jest zależna od systemu operacyjnego, szczególnie w odniesieniu do tego, czy proces będzie czekał na zatrzask i jak długo.

celem zatrzasków jest zarządzanie współbieżnym dostępem do współdzielonych struktur danych, tak aby tylko jeden proces mógł uzyskać dostęp do struktury naraz. Zablokowane procesy (procesy oczekujące na wykonanie części kodu, dla której zatrzask został już uzyskany przez inny proces) będą czekać, aż zatrzask zostanie zwolniony. Oracle używa atomowych instrukcji, takich jak” testuj i ustaw ” do obsługi zatrzasków. Ponieważ instrukcje ustawiania i zwalniania zatrzasków są atomowe, system operacyjny gwarantuje, że tylko jeden proces ją otrzymuje, a ponieważ jest to tylko jedna instrukcja, jest dość szybki.

wnioski o zatrzask można składać w dwóch trybach:

  • willing-to-wait: żądanie trybu „willing-to-wait” będzie zapętlać, czekać i żądać ponownie, aż zatrzask zostanie uzyskany.
  • no wait: w trybie” no wait ” proces zażąda zatrzasku, a jeśli nie jest dostępny, zamiast czekać, żądany jest inny. Tylko w przypadku awarii proces serwera musi czekać.

różnica między zatrzaskami& Enqueues

jedna różnica między zatrzaskiem a zapytaniem jest taka, że zapytanie jest uzyskiwane za pomocą specjalnego mechanizmu blokującego systemu operacyjnego, podczas gdy zatrzask jest uzyskiwany niezależnie od systemu operacyjnego. Zapytanie pozwala użytkownikowi na zapisanie wartości w blokadzie (tj. w trybie, w którym ją żądamy). Menedżer blokad systemu operacyjnego śledzi zablokowane zasoby. Jeśli proces nie może zostać przyznany blokadzie, ponieważ jest niezgodny z żądanym trybem i blokada jest żądana za pomocą wait, system operacyjny umieszcza proces żądający w kolejce wait, która jest obsługiwana w FIFO.

kolejna różnica między zatrzaskami i zapytaniami polega na tym, że zapytania utrzymują i zamawiają kolejkę kelnerów, podczas gdy zatrzaski nie. Wszystkie procesy oczekujące na zatrzask jednocześnie ponawiają (w zależności od harmonogramu). Oznacza to, że każdy z kelnerów może dostać zatrzask, a prawdopodobnie pierwszy, który próbuje uzyskać zatrzask, może być ostatnim, który go dostanie. Kelnerzy zatrzaskowi mogą albo używać timerów do przebudzenia i ponowienia próby, albo mogą się obracać (tylko w wieloprocesorach) obracając się na zatrzasku, przytrzymując procesor i czekając w oczekiwaniu na zwolnienie tego zatrzasku w krótkim czasie).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.