Jak Oracle obsługuje wiele współbieżnych WSTAWEK na jednym stole

8

Próbuję trochę lepiej zrozumieć Oracle 11g. Moje pytanie jest proste: w jaki sposób Oracle obsługuje dwie sesje, które próbują jednocześnie wstawić rekordy do jednej tabeli.

Na przykład WSTAW A działa o godzinie 13:00 w stosunku do tabeli 1. Wykonanie zajmie 5 minut. WSTAW B jest wykonywany o 13:02 w stosunku do tabeli 1. Wykonanie zajmie 1 minutę.

Co się stanie? Czy kolejka Oracle INSERT B zostanie wykonana po zakończeniu INSERT A? Czy INSERT B będzie działał jednocześnie z INSERT A?

Dzięki!

Dustin
źródło
6
nic nie przebije próby samodzielnego zobaczenia :-)
Jack mówi: spróbuj topanswers.xyz
Absolutnie. Nie jestem jednak pewien, jak utworzyć zapytanie, które celowo zajmie 5 minut.
Dustin,
3
wstawić dużo danych? insert into foo(id) select level from dual connect by level<1000000(zwiększanie liczby zer po kolei, aż będzie wystarczająco wolne)
Jack mówi, spróbuj wypróbować topanswers.xyz

Odpowiedzi:

4

Wstawki nie wpływają na siebie nawzajem, chyba że byłyby w konflikcie z ograniczeniami klucza unikalnego lub podstawowego. Powinny być niezależne. Uważam, że ten problem współbieżności jest jednym z powodów, dla których sekwencja Oracle jest osobnym obiektem (buforowane, zastępcze generowanie PK oddzielone od wstawki).

Pod tym względem działają na nieprzydzielonym stole, jak widać na ich sesji. To zachowanie jest opisane w poście dotyczącym przepływu stosu poniżej.

/programming/3194999/dml-by-multiple-users-commit-scenarios-in-oracle

REW
źródło
2

Być może warto rzucić okiem na Oracle Transaction Management (Concepts) lub SQL Processing for Application Developers (Advanced Application Developer's Guide)

Możesz zbadać zachowanie Oracle, otwierając sesję z sqlplus, ustawiając automatyczne zatwierdzanie przez wykonanie

wyłącz automatyczne zatwierdzanie

i wykonanie wstawki

wstaw do tabeli A (...) wartości (...);

Pozostaw tę sesję otwartą i rozpocznij sesję sqlplus z innego okna, wyłącz autocommit i wydaj kolejną wstawkę. Obie transakcje będą aktywne do momentu zamknięcia ich przez zatwierdzenie (lub wycofanie).

W większości sytuacji tak naprawdę nie jest konieczne wyłączanie automatycznego zatwierdzania, ponieważ jest to ustawienie domyślne dla sqlplkus, jeśli nie zostało to zmienione.

cud173
źródło