Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij...

21
Bazy danych 6a. Transakcje P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2018

Transcript of Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij...

Page 1: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Bazy danych

6a. Transakcje

P. F. Górahttp://th-www.if.uj.edu.pl/zfs/gora/

2018

Page 2: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Transakcje

• Pojedynczy uzytkownik — ochrona szczególnie wrazliwych fragmentów.Transakcja wykonuje sie albo w całosci, albo wcale. Jezeli w trakcie wykony-wania transakcji wystapi jakis bład, cała sekwencje operacji mozna odwołac,przywracajac baze do stanu sprzed rozpoczecia tej sekwencji.

• System wielodostepny

1. Jak wyzej.

2. Rózne procesy klienckie odwołujace sie do tych samych tabel nie mogasie ze soba kłócic.

Copyright c© 2009-18 P. F. Góra 6a–2

Page 3: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Spójnosc danych w bazach rozproszonych oznacza, ze

kazdy serwer przechowujacy baze lub jej fragment

musi zwrócic taka sama odpowiedz na dane

zapytanie, gdyby zadac je w tym samym momencie.

Wymóg zachowania spójnosci najmocniej odróznia

relacyjne (transakcyjne) bazy danych od baz danych

NoSQL.Copyright c© 2009-18 P. F. Góra 6a–3

Page 4: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Zasady ACID (T. Hearder, A. Reuter, 1983)

A Atomicity — atomowosc.Transakcja jest niepodzielna, albo wszystko, albo nic.

C Consistency — spójnosc.Transakcja nie moze naruszac integralnosci danych: spójnosci danych po-miedzy róznymi serwerami przechowujacymi te sama baze lub jej fragmenty,a takze wiezów narzuconych na dane w tabelach.

I Isolation — izolacja.Jedna transakcja nie moze widziec wyników działania jakiejs innej, nieza-twierdzonej transakcji. Mozna powiedziec, ze transkacja musi odbywac sietak, jakby zadna inna transakcja nie miała miejsca w tym samym czasie.

D Durability — trwałosc.Zmiany wprowadzone w transakcji musza byc trwałe, niezaleznie od mozli-wych pózniejszych błedów sprzetu lub oprogramowania.

Copyright c© 2009-18 P. F. Góra 6a–4

Page 5: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Jak to robimy w SQL?

START TRANSACTION; START TRANSACTION;zapytanie1; zapytanie1;zapytanie2; zapytanie2;. . . . . .zapytanieN ; zapytanieN ;COMMIT; ROLLBACK;

Zmiany zostaja zatwierdzone Zmiany zostaja odwołane

Copyright c© 2009-18 P. F. Góra 6a–5

Page 6: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Wielodostepnosc — co moze pójsc zle?

1. Niespójnosc odczytów — jedna transakcja moze odczytac dane zmienia-ne przez druga transakcje, chociaz transakcja ta nie zatwierdziła jeszczezmian.

2. Niepowtarzalnosc odczytów — transakcja odczytuje dane, nieco pózniej od-czytuje je ponownie, a odczytane dane sa inne, mimo iz transakcja odczy-tujaca nie została jeszcze zatwierdzona.

3. Odczyty fantomowe — jedna tabela dodaje wiersz, druga transakcja aktua-lizuje wiersze. Nowy wiersz powinien byc zaktualizowany, a nie jest.

Copyright c© 2009-18 P. F. Góra 6a–6

Page 7: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Poziomy izolacji ANSI

Poziom izolacji Niespójnosc Niepowtarzalnosc Odczytyodczytów odczytów fantomowe

Read uncommitted OK OK OKRead committed NIE OK OKRepeatable read NIE NIE OKSerializable NIE NIE NIE

Serializowalnosc oznacza, ze wynik sekwencji przeplatajacych sie działan, wy-konywanych przez zatwierdzane transakcje, musi scisle odpowiadac sytuacji,w której wszystkie transakcje wykonywane sa kolejno, jedna po zakonczeniudrugiej.

Copyright c© 2009-18 P. F. Góra 6a–7

Page 8: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Jak realizujemy izolacje?

W celu zapewnienia izolacji w systemie wielodostepnym, transakcje blokuja ta-bele (fragmenty tabel), które sa im potrzebne. Najczesciej stosowane mechani-zmy to:

2PL Strict two-phase locking: Kazda transakcja zakłada blokade na kazdy re-kord, który chce odczytac, przed dokonaniem odczytu. Blokady do od-czytu moga byc współdzielone z innymi transakcjami. Kazda transakcjazakłada tez wyłaczna blokade na kazdy fragment danych, który chce za-pisac. Wszystkie blokady sa utrzymywane az do zakonczenia transakcji.Jest to algorytm “pesymistyczny”.

OCC Optimistic Concurrency Control : Wiele transakcji moga odczytywac i mo-dyfikowac fragment danych bez zakładania blokad. Transakcje zapamietuja

Copyright c© 2009-18 P. F. Góra 6a–8

Page 9: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

historie dokonywanych odczytów i zapisów. Przed zatwierdzeniem trans-akcja sprawdza historie w celu wykrycia ewentualnych konfliktów z innymitransakcjami. Jesli jakies konflikty zostana wykryte, jedna z transakcji wy-wołujacych konflikt zostaje odwołana.OCC zakłada, ze wiekszosc transakcji moze sie zakonczyc pomyslnie bezpopadania w konflikt z innymi transakcjami (konflikt polega na zadaniu do-stepu do tych samych rekordów bazy — OCC domyslnie zakłada niewielkiewspółzawodnioctwo o dostep do tych samych danych). Wobec tego na bazenie sa nakładane blokady, zabezpieczajace przez konfliktami, ale spowalnia-jace działanie.

Aby zminimalizowac blokowanie (i opóznienie innych transakcji), stosuje sie me-chanizm OCC. Działa on dobrze gdy konflikty sa rzadkie, ale moze jednak wy-generowac duzy koszt, jezeli konflikty nie sa rzadkie; w tych wypadkach mecha-nizm 2PL jest efektywnie szybszy.Copyright c© 2009-18 P. F. Góra 6a–9

Page 10: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Etapy algorytmu OCC

OCC przebiega w nastepujacych etapach:

Begin Rozpocznij transakcje zapisujac timestamp jej rozpoczecia.

Modify Odczytaj dane z bazy i tymczasowo zapisz zmiany (WAL - patrz nizej).

Validate Sprawdz, czy inne transakcje nie modyfikowały danych, z których ko-rzystała (czytała lub zapisywała) biezaca transakcja. Nalezy sprawdzic tarn-sakcje zakonczone po rozpoczeciu transakcji biezacej, niekiedy takze innetransakcje, które jeszcze sie nie zakonczyły.

Commit/Rollback Jesli nie wystapił konflikt, zapisz dane (COMMIT). Jesli kon-flikt wystapił, odwołaj transakcje (ROLLBACK).

Uwaga! Sprawdzenie, czy wystapił konflikt i decyzja o zatwierdzeniu/odrzuceniutransakcji samo musi miec charakter operacji atomowej, w przeciwnym raziemoze wystapic bład typu time of check to time of use (TOCTTOU).Copyright c© 2009-18 P. F. Góra 6a–10

Page 11: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Uwaga

• Instrukcje DDL (Data Description Language), czyli instrukcje tworzace i usu-wajace bazy oraz tworzace, usuwajace i modyfukujace tabele nie sa “trans-akcyjne” — nie mozna ich wycofac.

• W MySQL tabele, które chcemy zabezpieczac transakcjami, musza byc typuInnoDB.

Copyright c© 2009-18 P. F. Góra 6a–11

Page 12: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Write-ahead logging — WAL

Wszystkie zmiany w bazie, zanim zostana ostatecznie zatwierdzone, sa tymcza-sowo zapisywane w specjalnym pliku, w RDBMS zwanym dziennikiem systemo-wym. Zapisy w dzienniku systemowym sa indeksowane za pomoca timestamp,z reguły z dokładnoscia do milisekund. Dziennik systemowy słuzy do

• sprawdzania, czy nie wystapił konflikt pomiedzy transakcjami,

• odtwarzania stanu systemu w przypadku awarii.

Dopiero jesli dla jakiejs transakcji zostanie wydane polecenie COMMIT, zmianywprowadzane przez te transakcje sa przepisywane z dziennika systemowego dotabel.

Copyright c© 2009-18 P. F. Góra 6a–12

Page 13: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Oprócz dziennika systemowego niekiedy (w systemach rozproszonych praktycz-nie zawsze) istnieje tez undo log — plik zawierajacy informacje o tym, jakiezmiany byc moze w przyszłosci bedzie nalezało wycofac.

Copyright c© 2009-18 P. F. Góra 6a–13

Page 14: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Two-phase COMMIT — 2PC

W przypadku rozproszonych baz danych lub baz przechowywanych w systemieskalowania poziomego, nalezy szczególnie zadbac o spójnosc (consistency ) da-nych przechowywanych na róznych serwerach. Najczesciej robi sie to za po-moca protokołu Two-phase COMMIT (2PC).

Jeden wezeł sieci, koordynator, działa jako master. Pozostałe wezły tworza ko-horte. 2PC jest rozpoczynane przez koordynatora. Członkowie kohorty albozgadzaja sie na zapisanie zmian, albo wysyłaja sygnał o koniecznosci przerwa-nia transakcji. W wielu architekturach dla róznych transakcji rózne wezły mogabyc koordynatorami.

Copyright c© 2009-18 P. F. Góra 6a–14

Page 15: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Faza commit request (faza głosowania):

• Koordynator wysyła zapytanie o gotowosc COMMIT do wszystkich człon-ków kohorty i czeka na ich odpowiedz.

• Kazdy z członków kohorty wykonuje transakcje az do punktu, w którymnalezałoby wydac polecenie COMMIT i przygotowuje swój undo log.

• Członkowie kohorty, którym udało sie wykonac powyzszy punkt, wysy-łaja koordynatorowi informacje, ze zgadzaja sie na zatwierdzenie trans-akcji. Członkowie kohorty, którzy napotkali bład uniemozliwiajacy za-twierdzenie transakcji, wysyłaja koordynatorowi informacje, ze transakcjinie mozna zatwierdzic.

Copyright c© 2009-18 P. F. Góra 6a–15

Page 16: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Faza commit (zakonczenie transakcji): Jesli wszyscy członkowie kohorty po-twierdza gotowosc do wykonania transakcji,

• koordynator wysyła polecenie COMMIT do wszystkich członków kohorty,

• członkowie kohorty zatwierdzaja transakcje na swoich wezłach i zwal-niaja wszystkie blokady nałozone na dane w zwiazku z dana transakcja,

• członkowie kohorty wysyłaja potwierdzenie do koordynatora,

• koordynator zatwierdza transakcje i zwalnia blokady po otrzymaniuwszystkich potwierdzen.

Copyright c© 2009-18 P. F. Góra 6a–16

Page 17: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Jesli nie ma zgody na transakcje, czyli gdy którykolwiek z członków kohortyzasygnalizuje w fazie głosowania brak zgody na transakcje lub gdy przekro-czony zostanie czas oczekiwania (timeout) koordynatora,

• koordynator wysyła polecenie ROLLBACK do wszystkich członków ko-horty,

• kazdy z członków kohorty wycofuje transakcje korzystajac ze swo-jego undo log, po czym zwalnia wysztkie blokady nałozone na danew zwiazku z dana transakcja,

• członkowie kohorty wysyłaja powiadomienia do koordynatora,

• koordynator konczy (wycofuje) transakcje po otrzymaniu wszystkichpowiadomien, po czym zwalnia wszystkie blokady nałozone na danew zwiazku z dana transakcja.

Copyright c© 2009-18 P. F. Góra 6a–17

Page 18: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Najwieksza wada protokołu two-phase COMMIT jest blokowanie. Członkowiekohorty po wysłaniu zgody na transakcje do koordynatora, czekaja blokujacdane, az otrzymaja ostateczne COMMIT lub ROLLBACK od koordynatora. Jeslikoordynator ulegnie w tym czasie awarii lub jesli utracona zostanie komunikacjapomiedzy koordynatorem a członkami kohorty, niektórzy członkowie kohorty niebeda wiedzieli, w jaki sposób maja zakonczyc transakcje. Pozostana w staniezawieszenia, utrzymujac blokady nałozone na tabele.

Copyright c© 2009-18 P. F. Góra 6a–18

Page 19: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

Ryzyko zwiazane z transakcjami

1. Długo działajace transakcje blokuja dostep innych uzytkowników do danych,na których działa transakcja, dopóki nie zostanie ona zatwierdzona lub od-wołana.

2. Nalezy unikac transakcji wtedy, gdy wymagana jest interakcja z uzytkowni-kiem –– nalezy najpierw zebrac wszytskie dane, a dopiero potem rozpoczy-nac transakcje.

Copyright c© 2009-18 P. F. Góra 6a–19

Page 20: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

(B)lokowanie tabel

LOCK TABLES nazwa tabeli [READ | [LOW PRIORITY] WRITE];

• Tryb READ — chce czytac tabele i w tym czasie nie zezwalam innym nazapis.

• Tryb WRITE — chce zmieniac zawartosc tabeli i w tym czasie nie zezwalaminnym ani na zapis, ani na odczyt.

Copyright c© 2009-18 P. F. Góra 6a–20

Page 21: Bazy danych 6a. Transakcje - Jagiellonian Universityth- · 2018-11-22 · Begin Rozpocznij transakcje˛ zapisujac˛ timestamp jej rozpoczecia.˛ Modify Odczytaj dane z bazy i tymczasowo

• Tryb LOW PRIORITY WRITE — pozwala innym watkom na załozenie bloka-dy READ; w tym czasie watek, który chce nałozyc blokade LOW PRIORITY

WRITE, musi czekac, az tamten watek zwolni blokade.

UNLOCK TABLES; — zwalnia wszystkie zablokowane przez dany watek tabele.

Tabel nie nalezy blokowac zbyt długo lub niepotrzebnie.

Uwaga praktyczna: Aplikacja powinna najpierw zebrac wszystkie potrzebnedane od uzytkownika, pózniej inicjowac transakcje lub blokowac tabele.

Copyright c© 2009-18 P. F. Góra 6a–21