2016-09-18 2 views
-1

Betrachten Sie den Fall der Aktualisierung von 3 Zeilen in 3 Tabellen in einer einzigen Transaktion.Oracle transaction table locking

Was sind die Leistungsfolgen, wenn man versucht, dies parallel zu tun?

Von Parallel, ich meine mehrere Transaktionen parallel tun.

Von Leistungsfolgen, meine ich: Werden einige der Transaktionen warten, bis der erste beendet? Wird nur eine Transaktion durchgeführt und alle anderen gesperrt, bis die Sperrung abgeschlossen ist? Ist es auf einer Reihe basiert? Tabelle basiert?

+0

Warum die Abstimmung unten? –

Antwort

0

Von here (Oracle 11.2):

A Zeilensperre, auch eine Sendesperre genannt, ist eine Sperre für eine einzelne Zeile der Tabelle. Eine Transaktion erwirbt eine Zeilensperre für jede Zeile, die durch eine Anweisung INSERT, UPDATE, DELETE, MERGE oder SELECT ... FOR UPDATE geändert wurde. Die Zeile Sperre ist vorhanden, bis die Transaktion festgeschrieben oder zurückgesetzt wird.

Dies bedeutet, dass bei Datenaktualisierungen nur die betroffenen Zeilen gesperrt werden. Wenn mehrere Aktualisierungen für die gleichen Zeilen ausgeführt werden, führt der erste, der die Zeile "fängt", dazu, dass die anderen warten, bis die Zeile freigegeben wird (Festschreiben/Zurücksetzen).

Auch dies könnte ein Deadlock in dem folgende zyklischen Update Szenario verursachen:

Trans-A -> TA-RA -> TB-RB 
Trans-B -> TB-RB -> TA-RA 

Was bedeutet, dass Updates immer braucht, um die gleiche Tabelle Update-Sequenz hat.

* Lesevorgänge werden nicht gesperrt und es wird der zuletzt zugesagte Wert angezeigt.

+0

Warum beantworten Sie Ihre eigene Frage? War das eine Frage für uns oder für dich? – sagi

+0

@sagi - Gibt es ein Problem bei der Beantwortung meiner eigenen Frage? Es ist immer noch Wissensaustausch. Andere können es benutzen. –

+0

SO existiert, um Fragen zu stellen, die ** Sie ** eine Antwort zu ihnen benötigen, nicht etwas fragend, Sie kennen bereits die Antwort für. Es ist nicht so, dass du die Lösung gefunden hättest, nachdem du die Frage gestellt hast, du wusstest es bereits. – sagi